Metode numerik : menyelesaikan sistem persamaan linear menggunakan metode Gauss dan c++


Long time no see, sudah lama tidak update blog ini dikarenakan tidak adanya perkembangan yang signifikan dan kesibukan real life yang semakin padat saja. Di sela-sela kegiatan yang padat, saya masih sempat untuk refreshing melatih logika seperti membuat script yang akan dibahas kali ini.

Sesuai judulnya, pada postingan kali  ini akan membahas tentang metode numerik yaitu sistem persamaan linear. Apa itu sistem persamaan linear? bisa dibaca di sini. Berangkat dari pemahaman itu, suatu persamaan linear akan mudah dicari nilai variabelnya jika nilai variabel yang tidak di ketahui hanya 1, seperti :
12 + x =15
Disini sangat jelas kalau nilai x pastilah 3. Bagaimana kalau ada 2 variabel yang tidak diketahui koefisiennya? Di butuhkan  1 persamaan tambahan lagi, contoh asumsi x0 dan x1 adalah 2 variabel yang koefisiennya masih belum diketahui :
x0 + 2 x1 = 5
2 x0 + 3 x1 = 9
Dari sini kita bisa mengeliminasi 1 variabelnya terlebih dahulu untuk mengetahui nilai variabel yang tersisa dan hasilnya x0 = 3 dan x1 = 1. Satu variabel butuh 1 persamaan dan 2 variabel butuh 2 persamaan, dapat polanya? Ya, untuk mengetahui nilai dari n variabel kita butuh n persamaan yang menggambarkan interaksi variabel - variabel itu.

Dari pengetahuan dasar inilah kita berangkat untuk melakukan pencarian solusi nilai variabel pada persamaan linear menggunakan metode Gauss. Pada metode ini melibatkan matrix dan operasi matrix. Apa itu matrix dan bagaimana operasi - operasi matrix itu bisa dilihat di sini. Matrix pada sistem persamaan linear akan selalu menjadi matriks bujur sangkar sesuai dengan prinsip yang sudah kita temukan tadi : 
untuk mengetahui nilai dari n variabel kita butuh n persamaan yang menggambarkan interaksi variabel - variabel itu
Dari matriks bujur sangkar ini akan di ubah menjadi matriks upper. Dari matriks upper ini lah proses mencari nilai tiap variabel akan di lakukan. Intinya, proses pengerjaannya : Bentuk persamaan ke bentuk matriks ---> ubah matriks ke matriks upper ---> cari nilai tiap variabel. Apa itu matriks upper? Bisa dilihat di sini. Untuk mempercepat menyelesaikan persoalan ini, karena langkah - langkah kerjanya sudah di kuasai, tentu membuat program komputer untuk perhitungannya menjadi pilihan paling tepat, biasanya kebanyakan orang akan menggunakan MATLAB, tapi kali ini saya akan menggunakan c++ karena tujuan saya kali ini hanya untuk melatih logika dan kemampuan pemrograman c++ saya sendiri. Ok, scriptnya bisa di lihat di sini dan input filenya di sini. Program kali ini mengambil input dari file karena menginput datanya dari terminal itu sangat merepotkan.

Sedikit penjelasan tentang scriptnya, script ini bekerja untuk sistem persamaan linear dengan 4 variabel, untuk mengubahnya dari 4 variabel yang harus di ubah pertama pada baris 9 dan 10 :
#define BATASAN_JUMLAH_DATA 4
#define BATAS_KOLOM 5
Pada BATASAN_JUMLAH_DATA ubahlah nilainya dengan umlah variabel yang ingin dicari dan BATASAN_KOLOM ubah dengan nilai BATASAN_JUMLAH_DATA + 1. Mengapa begitu? ini ada hubungannya dengan input file yang digunakan dalam script ini yaitu :
    ifstream input("matrix");
input filenya bernama matrix. Anda bisa mengubah namanya sesuka hati seperti matrix.txt atau input.txt. Pada file input ini, matriks persamaan pada suku kiri di satukan dengan hasil persamaan pada operasi matriks di sisi kanan
2 1 -1 2 14
1 -3 2 -1 -12
-3 -1 1 -3 -18
4 2 -3 1 29
yang sebenarya dari persamaan - persamaan :
2 x1 + x2 - x3 + 2 x4 = 14
x1 - 3 x2 + 2 x3 - x4 = -12
-3 x1 - x2 + x3 - 3 x4 = -18
4 x1 + 2 x2 - 3 x3 + x4 = 29
Kemudian, bagian dari script lain yang harus di edit untuk menyesuaikan sesuai kebutuhan ada pada :
while (input >> matrix[i][0] >> matrix[i][1] >> matrix[i][2] >> matrix[i][3] >> matrix[i][4]) {
Jika kebetulan perlu mencari nilai 5 variabel maka akan menjadi
while (input >> matrix[i][0] >> matrix[i][1] >> matrix[i][2] >> matrix[i][3] >> matrix[i][4]) >> matrix[i][5] {
Seperti itu sesuai kebutuhan. Ya, saya tahu ini sangat tidak efisien dan cara yang lebih efisiennya harusnya tidak terlalu sulit juga. Dalam menjalankan script ini nanti selain di perlihatkan nilai dari variabel yang di cari akan di perlihatkan juga tahap - tahap perubahan matriks bujur sangkar dari persamaan - persamaan yang telah di ketahui menjadi matriks upper, seperti jika menggunakan file input pada contoh postingan ini, perubahan matrixnya yang terlihat di layar terminal adalah :
keadaan matrix saat ini
2 1 -1 2 14
0 -3.5 2.5 -2 -19
0 0.5 -0.5 0 3
0 0 -1 -3 1
keadaan matrix saat ini
2 1 -1 2 14
0 -3.5 2.5 -2 -19
0 0 -0.142857 -0.285714 0.285714
0 0 -1 -3 1
keadaan matrix saat ini
2 1 -1 2 14
0 -3.5 2.5 -2 -19
0 0 -0.142857 -0.285714 0.285714
0 0 0 -1 -1
Sekian postingan kali ini, saya tahu script kali ini perlu di benahi sedikit agar lebih efisien dan efektif. Silahkan benahi kekurangannya sebagai latihan dan have fun!

Komentar