Sebuah struk belanja menyimpan persamaan linear tanpa kita sadari. Bayangkan dua kunjungan ke toko sembako yang sama: kunjungan pertama membeli 2 kg beras dan 1 kg gula seharga 27.000 rupiah; pada kunjungan kedua, teman kita membeli 1 kg beras dan 3 kg gula seharga 31.000 rupiah. Bila harga satuan tiap barang sudah diketahui, kedua struk itu mudah dijelaskan; persoalannya justru kebalikannya — dari total belanja, kita ingin menemukan harga satuan.
Persoalan seperti ini disebut sistem persamaan linear: beberapa persamaan yang berlaku bersamaan atas variabel yang sama. Bab ini menerjemahkan soal cerita menjadi bentuk matriks Ax = b, menyelesaikannya dengan np.linalg.solve, memverifikasi jawabannya, lalu menengok syarat agar solusinya tunggal.
Dari Soal Cerita ke Bentuk Ax = b #
Penerjemahan mengikuti empat langkah yang bisa dipakai untuk sistem berukuran apa pun:
- Tentukan variabel: x adalah harga beras per kg, y adalah harga gula per kg.
- Tulis satu persamaan per struk: 2x + y = 27000 dan x + 3y = 31000.
- Susun koefisien tiap persamaan menjadi baris matriks A, dan total belanja menjadi vektor b.
- Selesaikan Ax = b dengan
np.linalg.solve(A, b).
Hubungan tiap kalimat soal dengan isi array:
| Kalimat dari soal | Bagian array yang terbentuk |
|---|---|
| “2 kg beras dan 1 kg gula, total 27.000” | baris pertama A: [2, 1], dan elemen pertama b: 27000 |
| “1 kg beras dan 3 kg gula, total 31.000” | baris kedua A: [1, 3], dan elemen kedua b: 31000 |
Dalam notasi matriks, sistem itu menjadi Ax = b dengan A berbentuk (2, 2), x = [x, y], dan b = [27000, 31000]. Berikut kode lengkapnya:
import numpy as np
# 2x + y = 27000 (struk pertama)
# x + 3y = 31000 (struk kedua)
A = np.array([[2.0, 1.0],
[1.0, 3.0]])
b = np.array([27000.0, 31000.0])
x = np.linalg.solve(A, b)
print("A =")
print(A)
print("b =", b)
print("x =", x)Output yang Dihasilkan:
A =
[[2. 1.]
[1. 3.]]
b = [27000. 31000.]
x = [10000. 7000.]Baris demi baris:
- Baris 3-4 (komentar): kalimat asli soal disimpan sebagai komentar, sehingga pembaca kode tetap tahu konteksnya tanpa membuka soal cerita.
- Baris 5-6 (
A = ...): aturan pentingnya — baris mewakili persamaan, kolom mewakili variabel. Karena ada 2 persamaan dan 2 variabel, A berbentuk (2, 2). - Baris 7 (
b = ...): array 1-D berbentuk (2,) menampung total belanja tiap struk. - Baris 8 (
x = np.linalg.solve(A, b)): fungsisolvememfaktorisasi A (dekomposisi LU dengan pivoting di LAPACK) lalu menghitung x; seluruh proses itu tidak perlu kita tulis manual. - Baris 12 (
print("x =", x)): hasil[10000. 7000.]berarti beras 10.000 rupiah per kg dan gula 7.000 rupiah per kg.
Memverifikasi Solusi dengan A @ x #
Sebelum dipakai, jawaban perlu diuji. Secara manual: struk pertama menjadi 2(10000) + 7000 = 27000 dan struk kedua menjadi 10000 + 3(7000) = 31000; keduanya cocok. Secara programatik, solusi yang benar harus memenuhi A @ x sama dengan b — bentuk perkalian matriks-vektor dari bab Matrix Multiplication.
import numpy as np
A = np.array([[2.0, 1.0],
[1.0, 3.0]])
b = np.array([27000.0, 31000.0])
x = np.linalg.solve(A, b)
print("A @ x =", A @ x)
print("array_equal:", np.array_equal(A @ x, b))
print("allclose :", np.allclose(A @ x, b))Output yang Dihasilkan:
A @ x = [27000. 31000.]
array_equal: True
allclose : TrueA @ x menghasilkan kembali [27000. 31000.], persis sama dengan b. Pada contoh ini np.array_equal bernilai True karena seluruh angkanya bulat dan terwakili sempurna di float64. Untuk data umum, kesetaraan persis sering gagal karena sisa pembulatan; np.allclose yang menoleransi selisih kecil adalah alat verifikasi standar, seperti dibahas di Floating Point Comparison.
Syarat Solusi Tunggal #
np.linalg.solve berasumsi sistem punya tepat satu solusi. Untuk sistem n persamaan dengan n variabel, asumsi itu terpenuhi ketika A bisa dibalik (invertible) — kondisi yang akan kita ukur dengan det di bab Determinant dan matrix_rank di bab Matrix Rank. Bila syarat itu tidak terpenuhi, ada dua kemungkinan lain:
- Tak hingga solusi: satu persamaan hanyalah kelipatan persamaan lainnya, misalnya x + y = 5 dan 2x + 2y = 10; kedua persamaan mengatakan hal yang sama.
- Tidak ada solusi: persamaan saling bertentangan, misalnya x + y = 5 dan x + y = 9.
Bagaimana bila jumlah persamaan lebih banyak daripada variabel, seperti pada data regresi? Sistemnya biasanya tidak punya solusi eksak, dan alat yang tepat berpindah ke np.linalg.lstsq — dibahas lengkap di bab Least Squares.