Eliminasi Gauss menyelesaikan sistem linear dengan merapatkan matriksnya menjadi bentuk segitiga, lalu membaca solusinya melalui substitusi balik. Topik ini membahas langkah eliminasi pada sistem dua dan tiga variabel, implementasinya sebagai kode Python, serta fungsi np.linalg.solve yang mengerjakan prosedur yang sama secara numerik. Hasil yang diperoleh diverifikasi, antara lain dengan menghitung sisa . Setelah topik ini dipahami, sistem berukuran puluhan variabel dapat diselesaikan dengan pemanggilan fungsi yang sama.
Titik potong yang dicari#
Sistem dua persamaan dua variabel berikut menjadi contoh sepanjang topik ini.
Setiap persamaan menggambarkan satu garis, dan solusi sistem adalah titik yang dilalui kedua garis sekaligus. Gambar berikut memperlihatkan perpotongan kedua garis di titik . Substitusi cepat memastikannya, yaitu dan . Prosedur numerik pada bagian berikutnya mencari titik ini tanpa menggambar apa pun, sehingga pola yang sama berlaku pada sistem yang tidak dapat dilukiskan lagi.
Eliminasi Gauss secara manual#
Eliminasi Gauss mengubah matriks koefisien menjadi matriks segitiga atas, yaitu matriks yang seluruh entri di bawah diagonal utamanya nol. Perubahan dilakukan dengan tiga operasi baris yang tidak mengubah solusi sistem.
- Menukar posisi dua persamaan.
- Mengalikan seluruh isi satu persamaan dengan bilangan tak nol.
- Menambahkan kelipatan satu persamaan ke persamaan lain.
Pada contoh, koefisien pada persamaan kedua dihilangkan dengan operasi . Hasilnya adalah bentuk segitiga berikut.
Persamaan kedua yang baru, yaitu , langsung memberikan . Nilai itu disubstitusikan balik ke persamaan pertama, yaitu , sehingga diperoleh . Proses dua tahap ini berlaku umum, yaitu eliminasi maju merapatkan matriks, kemudian substitusi balik membaca solusinya dari bawah ke atas. Bilangan pada diagonal utama selama eliminasi disebut pivot, dan eliminasi berjalan mulus bila setiap pivot tak nol.
Implementasi eliminasi sebagai kode#
Berkas berikut mengulang perhitungan manual di atas dengan array NumPy. Matriks dan vektor konstanta diubah langsung oleh operasi baris, kemudian substitusi balik dihitung dari persamaan terbawah.
import numpy as np
# sistem: x + 2y = 8 dan 3x + 4y = 18
A = np.array([[1.0, 2.0],
[3.0, 4.0]])
b = np.array([8.0, 18.0])
# eliminasi: hilangkan koefisien x pada persamaan kedua
faktor = A[1, 0] / A[0, 0]
A[1, :] = A[1, :] - faktor * A[0, :]
b[1] = b[1] - faktor * b[0]
print("matriks segitiga atas :")
print(A)
print("ruas kanan baru :", b)
# substitusi balik dari persamaan terbawah
y = b[1] / A[1, 1]
x = (b[0] - A[0, 1] * y) / A[0, 0]
print("solusi :", np.array([x, y]))matriks segitiga atas :
[[ 1. 2.]
[ 0. -2.]]
ruas kanan baru : [ 8. -6.]
solusi : [2. 3.]Keluaran menampilkan matriks segitiga atas yang sama dengan perhitungan manual, lengkap dengan ruas kanan yang ikut diubah. Variabel faktor menyimpan rasio , yaitu kelipatan yang menghilangkan koefisien di bawah pivot pertama. Kode ini hanya menghapus satu entri karena sistemnya dua variabel, sedangkan fungsi np.linalg.solve mengulang pola yang sama untuk setiap kolom sampai seluruh matriks menjadi segitiga.
Biaya eliminasi tumbuh sebanding pangkat tiga banyaknya variabel, sehingga matriks seribu kali seribu memerlukan kira-kira sepertiga miliar operasi perkalian dan penjumlahan. Bentuk segitiga yang dihasilkan justru murah dibaca, karena substitusi baliknya hanya tumbuh sebanding kuadrat banyaknya variabel. Pustaka LAPACK yang mendasari NumPy menyimpan faktor segitiga tersebut, sehingga sistem dengan matriks yang sama dapat diselesaikan ulang untuk ruas kanan lain tanpa mengulang seluruh eliminasi.
Fungsi solve untuk sistem berukuran berapa pun#
Fungsi np.linalg.solve menyelesaikan sistem dalam satu pemanggilan. Argumennya adalah matriks koefisien dan vektor ruas kanan, dan keduanya disusun mengikuti urutan persamaan serta urutan variabel.
import numpy as np
A = np.array([[1.0, 2.0],
[3.0, 4.0]])
b = np.array([8.0, 18.0])
solusi = np.linalg.solve(A, b)
print("solusi :", solusi)
print("sisa :", A @ solusi - b)solusi : [2. 3.]
sisa : [0. 0.]Vektor sisa berisi dan bernilai nol, sehingga solusi memenuhi kedua persamaan. Pola pemeriksaan ini berlaku untuk sistem berukuran besar karena vektor sisanya selalu dapat dihitung meskipun solusinya tidak dapat diperiksa dengan tangan. Contoh tiga variabel berikut menggunakan perencanaan resep, yaitu mencari banyaknya porsi tiga jenis kue dari total takaran tiga bahan.
import numpy as np
# resep tiga bahan: kolom A adalah takaran per porsi, barisnya bahan
# baris 1: tepung, baris 2: gula, baris 3: mentega
A = np.array([[1.0, 1.0, 1.0],
[2.0, 1.0, 3.0],
[1.0, 2.0, 2.0]])
b = np.array([6.0, 13.0, 11.0]) # persediaan tiap bahan
print("porsi tiap jenis :", np.linalg.solve(A, b))porsi tiap jenis : [1. 2. 3.]Keluaran menyatakan satu porsi jenis pertama, dua porsi jenis kedua, dan tiga porsi jenis ketiga menghabiskan persediaan dengan tepat. Fungsi solve juga menghitungnya tanpa membentuk invers matriks, sesuai algoritma pemfaktoran dari pustaka LAPACK yang mendasari NumPy.
Di mana hal ini ditemui dalam kode#
Regresi kuadrat terkecil pada pustaka machine learning berakhir pada sistem persamaan normal yang diselesaikan dengan np.linalg.solve atau varian stabilnya. Pola campuran dan pembagian kerja seperti contoh resep di atas digunakan pada perencanaan produksi maupun penjadwalan proyek. Analisis rangkaian listrik menyusun hukum Kirchhoff menjadi sistem besar yang solusinya adalah arus pada setiap cabang. Di sisi lain, solve melempar error LinAlgError ketika matriksnya tidak memiliki solusi tunggal, sehingga kode produksi membungkus pemanggilannya dalam try dan except. Kaitan error ini dengan matriks singular dibahas pada topik determinan.
Penyeimbangan persamaan reaksi kimia bekerja dengan pola yang sama, yaitu koefisien reaksi dicari dari keseimbangan setiap unsur. Pustaka numerik lain menyediakan fungsi dengan antarmuka yang hampir identik, misalnya scipy.linalg.solve yang menerima matriks dan vektor konstanta dengan bentuk argumen yang sama. Dengan demikian, keterampilan membaca dokumentasi NumPy langsung berpindah ke pustaka lain di ekosistem Python.
Ringkasan#
- Eliminasi Gauss merapatkan matriks koefisien menjadi matriks segitiga atas menggunakan tiga operasi baris, lalu substitusi balik membaca solusinya dari bawah ke atas.
- Pivot tak nol pada setiap langkah membuat eliminasi berjalan mulus dan sistem memiliki solusi tunggal.
np.linalg.solve(A, b)mengerjakan prosedur yang sama untuk sistem berukuran berapa pun, dan sisanya memverifikasi hasilnya.- Invers matriks tidak perlu dihitung bila yang dicari hanya vektor solusi, karena
solvelebih cepat dan lebih stabil.
Referensi#
- NumPy 2.1 documentation — NumPy
— Dokumentasi
np.linalg.solve,np.linalg.inv, dan errorLinAlgErroryang muncul pada sistem tanpa solusi tunggal. - MIT OpenCourseWare — Massachusetts Institute of Technology — Kuliah terbuka 18.06 Linear Algebra yang memperkenalkan eliminasi Gauss dan bentuk segitiga sebagai inti aljabar linear.
- Buku teks matematika terbuka — OpenStax — Buku teks terbuka yang membahas operasi baris elementer dan substitusi balik pada sistem persamaan linear.