Anda di halaman 1dari 12

Sparisoma Viridi, 201609050 dalam Fisika Granular, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran

dalam bentuk aslinya


diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com

Sistem Persamaan Linier


Sistem persamaan linier, yang merupakan kumpulan persamaan-persamaan linier,
dapat diselesaikan dengan berbagai metode seperti inversi matriks, reduksi baris [1],
dan beberapa metode lainnya. Sistem persamaan linier sendiri merupakan hasil dari
upaya untuk memecahkan suatu permasalahan tertentu, seperti arus listrik dalam
rangkaian multi simpul.

1 Sistem persamaan linier


Suatu persamaan linier dengan N variabel x1, .., xN memiliki bentuk
N

yj =

ji

xi .

(1)

i =1

Ragam Persamaan (1) dapat berjumlah M buah persamaan (j = 1, .., M). Kumpulan
persamaan-persamaan tersebutlah yang dinamakan sistem persamaan linier
y1 = c11x1 + c12x2 + .. + c1NxN
y2 = c21x1 + c22x2 + .. + c2NxN
y3 = c31x1 + c32x2 + .. + c3NxN

(2)

..
yM = cM1x1 + cM2x2 + .. + cMNxN
yang dapat dituliskan dalam bentuk matriks
CX = Y .

(3)

atau eksplisitnya
c11
c
21
c31

M
cm1

c12

c13

c22
c32

c23
c33

cm 2

cm3

L c1n
L c2 n
L c3 n

O M
L cmn

Persamaan (4) dapat pula dituliskan dalam bentuk


1

x1 y1
x y
2 2
x3 = y 3 .

L L
xn y m

(4)

c11

c21
c31

M
c
m1

c12
c 22
c32

c13
c 23
c33

cm 2

cm 3

L c1n y1

L c2n y2
L c3 n y 3 ,

O M L
L cmn y m

(5)

yang dikenal sebagai matriks teraugmentasi. Agar Persamaan (2) dapat diselesaikan,
maka dibutuhkan syarat bahwa M = N sehingga matriks C merupakan matriks
bujursangkar.
Terdapat tiga operasi dasar pada matriks:
(i) pertukaran baris,
(ii) mengalikan/membagi suatu baris dengan bilangan riil,
(iii) menjumlahan/mengurangkan dua baris.
Hasil dari (ii) dan (iii) diletakkan pada suatu baris menggantikan nilai sebelumnya pada
baris tersebut.
Dengan menggunakan operasi-operasi dasar tersebut Persamaan (5) dapat diubah
menjadi bentuk baris echelon
d11

0
0

M
0

d12
d 22
0
M
0

d13 L d1n z1

d 23 L d 2 n z 2
d 33 L d 3n z 3 .

M O M L
0 L d nn z n

(6)

Nilai-nilai x1, .., xN dapat diperoleh bila matriks dalam bentuk baris echelon dapat diubah
menjadi bentuk
1

0
0

M
0

0 0 L 0 x1

1 0 L 0 x2
0 1 L 0 x3 ,

M M O M L
0 0 L 1 xn

di mana nilai-nilai yang dicari terletak pada kolom ke-M.

(7)

2 Algoritma
Dari matriks dengan bentuk baris echelon nilai-nilai x1, .., xN dapat diperoleh dengan
menggunakan algoritma berikut
Algoritma penyelesaikan baris echelon
L1. i = n
L2. Sdx = 0
L3. j = i
L4. j n  L8
L5. j = j + 1
L6. Sdx = Sdx + dij xj
L7. j < n  L5
L8. xi = (zi Sdx) / dii
L9. i = i 1
L10. i > 1  L2
Tabel 1. Analisa dari algoritma penyelesaian baris echelon (bagian 1).
LK

Lx

xi

Sdx

L1

L2

L3

L4

L8

(zn Sdx) / dn,n

L9

n1

L10

n1

L2

n1

L3

n1

n1

L4

n1

n1

L5

n1

L6

n1

dn-1,n xn

L7

n1

dn-1,n xn

L8

n1

(zn-1 Sdx) / dn-1,n-1

dn-1,n xn

L9

n2

dn-1,n xn

L10

n2

dn-1,n xn

Tabel 2. Analisa dari algoritma penyelesaian baris echelon (bagian 2).


LK

Lx

xi

Sdx

L2

n2

L3

n2

n2

L4

n2

n2

L5

n2

n1

L6

n2

n1

dn-2,n-1 xn-1

L7

n2

n1

dn-2,n-1 xn-1

L5

n2

dn-2,n-1 xn-1

L6

n2

dn-2,n-1 xn-1 + dn-2,n xn

L7

n2

dn-2,n-1 xn-1 + dn-2,n xn

L8

n2

(zn-2 Sdx) / dn-2,n-2

dn-2,n-1 xn-1 + dn-2,n xn

L9

n3

dn-2,n-1 xn-1 + dn-2,n xn

L10

n3

dn-2,n-1 xn-1 + dn-2,n xn

L2

n3

L3

n3

n3

L4

n3

n3

L5

n3

n2

L6

n3

n2

dn-3,n-2 xn-2

L7

n3

n2

dn-3,n-2 xn-2

L5

n3

n1

dn-3,n-2 xn-2

L6

n3

n1

dn-3,n-2 xn-2 + dn-3,n-1 xn-1

L7

n3

n1

dn-3,n-2 xn-2 + dn-3,n-1 xn-1

L5

n3

dn-3,n-2 xn-2 + dn-3,n-1 xn-1

L6

n3

dn-3,n-2 xn-2 + dn-3,n-1 xn-1 + dn-3,n xn

L7

n3

dn-3,n-2 xn-2 + dn-3,n-1 xn-1 + dn-3,n xn

L8

n3

(zn-3 Sdx) / dn-3,n-3

dn-3,n-2 xn-2 + dn-3,n-1 xn-1 + dn-3,n xn

L9

n4

dn-3,n-2 xn-2 + dn-3,n-1 xn-1 + dn-3,n xn

L10

n4

dn-3,n-2 xn-2 + dn-3,n-1 xn-1 + dn-3,n xn

Tabel 3. Analisa dari algoritma penyelesaian baris echelon (bagian 3).


LK

Lx

xi

Sdx

L2

n4

L3

n4

n4

L4

n4

n4

L5

n4

n3

3 Implementasi dalam C++


Program untuk melakukan eliminasi Gauss disajikan dalam Kode 1 berikut ini.
Kode 1. Program eliminasi Gauss.
/*
matrix_Gaussian_elimination.cpp
Mencari invers dengan eliminasi Gauss
20150201 | Sparisoma Viridi
*/
#include <cmath>
#include <iostream>
using namespace std;
void display(double x[], int N) {
int M = N + 1;
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
int k = M * i + j;
cout << x[k];
if(j < M - 1) cout << "\t";
}
cout << endl;
}
}
int main(int argc, char *argv[]) {
// Jumlah baris
int N = 4;
// Array 2 dimensi dalam array 1 dimensi
double r[] = {
1, 1, 1, 1, 10,
4, 1, 3, 1, 19,

2, 1, 1, 1, 11,
1, 3, 1, 2, 18,
};
/*
double r[] = {
1, 3, 4, 1, 12,
0, 12, 0, 2, 4,
0, 0, 2, 1, 1,
0, 0, 0, 1, -1,
};
*/
// Tampilkan matriks awal
cout << "Matriks awal" << endl;
display(r, N);
// Indeks array dimulai dari 0
for(int k = 0; k < N - 1; k++) {
for(int i = 1 + k; i < N; i++) {
int ik = (N + 1) * i + k;
double cik = r[ik];
for(int j = k; j < N + 1; j++) {
int ij = (N + 1) * i + j;
int kj = (N + 1) * k + j;
int kk = (N + 1) * k + k;
r[ij] = r[ij] - cik * r[kj] / r[kk];
}
}
}
// Tampilkan matriks akhir
cout << endl;
cout << "Matriks berbentuk baris echelon" << endl;
display(r, N);
double x[N];
for(int i = N-1; i >= 0; i--) {
double c = 0;
for(int j = N-1; j > i; j--) {
int ij = (N + 1) * i + j;
c = c + x[j] * r[ij];
}
int iM = (N + 1) * i + N;
int ii = (N + 1) * i + i;
x[i] = (r[iM] - c) / r[ii];
}
cout << endl;
cout << "Solusi" << endl;

for(int i = 0; i < N; i++) {


cout << x[i] << endl;
}
return 0;
}

Program sebelumnya telah dibuat lebih user-friendly sebagaimana ditampilkan dalam


Kode 2 berikut
Kode 2. Program penyelesaian persamaan linier dengan reduksi baris.
/*
lineqrr0.cpp
Solving linear equations using row reduction
Sparisoma Viridi | dudung@gmail.com
Compile: g++ lineqrr0.cpp -o lineqrr0
Execute: ./lineqrr0 [option]
20160301
Create this program.
In Cywin atoi requires cstdlib library but not fog g++
in Kubuntu distro.
*/
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[]) {
// Define program name
const char *pname = "lineqrr0";
// Verbose usage
if(argc < 2) {
cout << "Usage: " << pname << " ";
cout << "[vop]" << endl;
cout << "vop\tverbose options:" << endl;
cout << "\t 0 show only final result" << endl;
cout << "\t 1 show intermmediate results" << endl;
return 1;
}

// Get verbose option


bool VERBOSE = (bool) atoi(argv[1]);
// Define augmented matrix of the linear equations
int ROW = 4;
int COL = 5;
double M[] = {
1, 1, 1, 4, 21,
1, 2, -1, 2, 9,
2, -1, 2, 3, 16,
-1, 1, -1, 2, 7
};
double m[ROW];
// Define epsilon for handling small numbers
const double eps = 1E-12;
// View initial augmented matrix
if(VERBOSE) {
cout << "# Initial augmented matrix" << endl;
for(int i = 0; i < ROW; i++) {
for(int j = 0; j < COL; j++) {
int ij = i * COL + j;
cout << M[ij];
if(j < COL - 1) cout << "\t";
}
cout << endl;
}
cout << endl;
}
// Begin row reduction operation
for(int i = 0; i < COL - 2; i++) {
for(int j = i + 1; j < ROW; j++) {
int ji = j * COL + i;
int ii = i * COL + i;
double c = M[ji] / M[ii];
for(int k = 0; k < COL; k++) {
int jk = j * COL + k;
int ik = i * COL + k;
M[jk] = M[jk] - M[ik] * c;
if(fabs(M[jk]) < eps) M[jk] = 0;
}
}

// View every step of row reduction operation


if(VERBOSE) {
cout << "# Make zero of column " << i + 1;
cout << endl;
for(int i = 0; i < ROW; i++) {
for(int j = 0; j < COL; j++) {
int ij = i * COL + j;
cout << M[ij];
if(j < COL - 1) cout << "\t";
}
cout << endl;
}
cout << endl;
}
}
// View echelon matrix
if(VERBOSE) {
cout << "# Echelon matrix" << endl;
for(int i = 0; i < ROW; i++) {
for(int j = 0; j < COL; j++) {
int ij = i * COL + j;
cout << M[ij];
if(j < COL - 1) cout << "\t";
}
cout << endl;
}
cout << endl;
}
// Perform back substitution
for(int i = 0; i < ROW; i++) {
int iCOL = (ROW - 1 - i) * COL + (COL - 1);
double y = M[iCOL];
for(int j = 0; j < i; j++) {
int ij = (ROW - 1 - i) * COL + (COL - 2 - j);
double dy = m[ROW - 1 - j] * M[ij];
if(fabs(dy) < eps) dy = 0;
y -= dy ;
}
int ii = (ROW - 1 - i) * COL + (COL - 2 - i);
double x = M[ii];
m[ROW - 1 - i] = y / x;
if(fabs(m[ROW - 1 - i]) < eps) m[ROW - 1 - i] = 0;
}

10

// View final result


if(VERBOSE) cout << "# Solution" << endl;
for(int i = 0; i < ROW; i++) {
if(fabs(m[i]) < eps) m[i] = 0;
cout << m[i] << endl;
}
// Terminate program with success state
return 0;
}

Hasil dari Kode 2 adalah sebagai berikut ini bila dipanggil dengan opsi 0
$ ./lineqrr0.exe 0
0
2
3
4

dan bila dipanggil dengan opsi 1


$ ./lineqrr0.exe 1
# Initial augmented matrix
1
1
1
4
1
2
-1
2
2
-1
2
3
-1
1
-1
2

21
9
16
7

# Make zero of column 1


1
1
1
4
0
1
-2
-2
0
-3
0
-5
0
2
0
6

21
-12
-26
28

# Make zero of column 2


1
1
1
4
0
1
-2
-2
0
0
-6
-11
0
0
4
10

21
-12
-62
52

# Make zero of column 3


1
1
1
4
0
1
-2
-2
0
0
-6
-11
0
0
0
2.66667

21
-12
-62
10.6667

# Echelon matrix

11

1
0
0
0

1
1
0
0

1
-2
-6
0

4
-2
-11
2.66667

21
-12
-62
10.6667

# Solution
0
2
3
4

4 Pertanyaan
1.

Jalankan Kode 1 dan tentukanlah nilai-nilai dari x1, x2, x3, dan x4!

2.

Gantilah bagian yang tepat dalam program pada Kode 2 sehingga dapat
merepresentasikan persamaan-persamaan linier berikut ini

3.

4.

x1 + 2 x 2 + 3x3 + 4 x 4 = 10 ,

(8a)

x1 x 2 + x3 4 x 4 = 3 ,

(8b)

x1 + 10 x 2 11x 3 + 5 x 4 = 5 ,

(8c)

2 x1 + 3x 2 + 3 x3 5 x 4 = 9 .

(8d)

Gunakan Kode 2 untuk menyelesaikan tiga persamaan linier berikut


x1 + 2 x 2 + 3 x3 = 3 ,

(9a)

x1 x 2 + x3 = 0 ,

(9b)

x1 + 10 x 2 11x 3 = 11 .

(9c)

Perhatikan rangkaian resistor dan batere dalam Gambar 1.


a.

b.
c.
d.

Tuliskan persamaan Kirchhof untuk arus pada titik-titik a, b, dan c. Gunakan


I31, I21, dan I23 yang mengarah ke atas dan melewati R31, R21, dan R23,
berturut-turut.
Tuliskan persamaan Kirchhof untuk simpul abed, bcfe, dan cadf.
Nyatakan sistem persamaan linier yang diperoleh dalam bentuk matriks
teraugmentasi.
Bila R12 = R23 = R32 = 0 tentukanlah I1, I2, dan I3 dengan terlebih dahulu
menyatakan matriks baris echelonnya.

12

c
b

2
3

R23

a
I2

R12
R2

e
R31
R3

I1
R1

I3
d

Gambar 1. Rangkaian listrik dengan lima simpul.

5 Rujukan
1. Eric W. Weisstein, "Gaussian Elimination", from MathWorld--A Wolfram Web
Resource,
URL
http://mathworld.wolfram.com/GaussianElimination.html
[20160905].

Anda mungkin juga menyukai