Praktikum 6
sistem persamaan linear
Latihan bermain matriks 4x4
transpose, invers, determinan, ekstrak diagonal
matriks, operasi matriks
Cara menyelesaikan SPL
Secara langsung
Eliminasi gauss, gauss-jordan
Dekomposisi L-U
Secara iterasi
Iterasi jacobi, gauss-seidel
Bentuk umum SPL
a koefisien konstanta, b konstanta, n banyaknya persamaan
Penyelesaian metode
langsung
6 x1 2 x2 x3 x4 9
2 x1 4 x2 x3 13
x1 x2 4 x3 x4 11
x1 x3 3 x4 8
6
2
A
1
1
1
4 1 0
1 4 1
0 1 3
2 1
9
13
b
11
8
1
2
x
3
4
X=inv(A)*b atau X=A\b
Matriks SPL segitiga atas -> subs. mundur
Matriks SPL segitiga bawah -> subs. maju
Segitiga Atas
a11 x1 a12 x2
a1n xn b1
a22 x2
a2 n xn b2
ann xn bn
Substitusi Langkah Mundur
bn
ann
i n 1, n 2,,
• Mula-mula hitung:
• Kemudian untuk
xn
bi
xi
,1
n
a x
j i 1
aii
ij
j
hitung:
Ketik di scinote, lalu gunakan
untuk menyelesaikan SPL
function x=backsub(A,b)
[m n]=size(A);
x=[];
x(n,1)=b(n,1)/A(n,n);
for i=n-1:-1:1
jum=0;
for j=i+1:n
jum=jum+A(i,j)*x(j,1);
end
x(i,1)=(b(i,1)-jum)/A(i,i);
end
endfunction
1
0
0
0
5 x1 3
2 3 7 x2 4
0 8 3 x3 7
0 0 3 x4 5
6
4
-1.8333
-1.5833
x
1.5000
1.6667
Ketik di scinote, lalu gunakan
untuk menyelesaikan SPL
function x=forsub(A,b)
[m n]=size(A);
x=[];
x(1,1)=b(1,1)/A(1,1);
7 0
4 2
9 6
5 3
0 0 x1 5
0 0 x2 4
5 0 x3 9
8 3 x4 3
for i=2:n
jum=0;
for j=1:i-1
jum=jum+A(i,j)*x(j,1);
end
x(i,1)=(b(i,1)-jum)/A(i,i);
end
endfunction
-0.7143
-0.5714
x
2.4000
-6.0190
Eliminasi Gauss
Menyelesaikan SPL dengan mengubah SPL itu menjadi
matriks segitiga atas (pakai OBD), lalu selesaikan dengan
substitusi mundur
function x=gausselim(A,b)
[m n]=size(A);
x=[];
for i=1:n-1
for j=i:m
if A(j,i)~=0
p=j;
break;
end
end
temp=A(i,:);
A(i,:)=A(p,:);
A(p,:)=temp;
temp=b(i,1);
b(i,1)=b(p,1);
b(p,1)=temp;
for j=i+1:n
s=A(j,i)/A(i,i);
for k=i+1:n
A(j,k)=A(j,k)-s*A(i,k);
end
b(j,1)=b(j,1)-s*b(i,1);
end
end
x=backsub(A,b);
endfunction
Contoh
3 2 2 x1 3
1 5 3 x 4
2
2 3 4 x 6
3
1.0917
x 1.2477
1.1101
Eliminasi Gauss-Jordan
Metode ini mengubah matriks SPL menjadi matriks satuan
sehingga tidak perlu menggunakan subtitusi mundur
Fungsi pivot
function [A, err] = gepivot(A, k)
err = 0;
[n, m] = size(A);
piv = A(k,k);
newpivot = k;
for i = k+1:n
if abs(A(i,k)) > abs(piv)
newpivot = i;
piv = A(i,k);
end
end
if piv == 0
err = 1;
elseif newpivot ~= k
for j = k:m
temp1 = A(k,j);
temp2 = A(newpivot,j);
A(k,j) = temp2;
A(newpivot,j) = temp1;
end
end
endfunction
Eliminasi Gauss-Jordan
function [x, err] = gaussjord(A, b)
err = 0;
x = zeros(size(b));
[n,m] = size(A);
if n ~= m
disp('error. bukan matiks segi')
err = 2; return
end
m = n+1; A(:,m) = b;
for k = 1:n
if k < n
[A, err] = gepivot(A, k);
end
if err ~= 0
disp('matriks singular'); return
end
for i = 1:n
if i ~= k
term = A(i,k)/A(k,k);
for j = k:m
A(i,j) = A(i,j) - term*A(k,j);
end
end
end
temp = A(k,k);
for j = k:m
A(k,j) = A(k,j)/temp;
end
end
x=A(:,m);
Contoh
0 1 2 x1 3
3 4 4 x 5
2
2 6 5 x 1
3
51.667
x 27.667
12.3333
Dekomposisi L-U
[l,u]=lu(a)
[l,u,e]=lu(a)
Iterasi Jacobi
Menyelesaikan SPL berukuran nxn secara iteratif
Diawali dengan memilih nilai awal x(0)
Contoh
Tentukan solusi SPL di bawah ini dengan nilai
awal P0 x0 , y0 , z0 0,0,0
2 x 8 y z 11
5 x y z 10
x y 4z 3
function [X,g,H]=jacobi(A,b,X0,T,N)
H=X0';
n=length(b);
X=X0;
for k=1:N
for i=1:n
s=b(i)-A(i,[1:i-1,i+1:n])*X0([1:i-1,i+1:n]);
X(i)=s/A(i,i);
end
g=abs(X-X0);
err=norm(g);
relerr=err/(norm(X)+%eps);
X0=X;
H=[H;X0'];
if (err<T)|(relerr<T),
break,
end
end
endfunction
Hasilnya sedikit berbeda dengan metode langsung atau
eliminasi
Metode ini akan bernilai konvergen jika matriksnya
merupakan matriks dominan secara diagonal, yaitu
apabila unsur diagonal atau elemen aii merupakan
elemen terbesar pada setiap baris.
Coba matriksnya kita ubah
5x-y+z=10
2x+8y-z=11
-x+y+4z=3
Iterasi Gauss-Seidel
Hampir sama dengan iterasi jacobi, tapi nilai
variabelnya berubah tiap iterasi
Contoh
Gunakan metode iterasi Gauss-Seidel untuk:
27x+6y-z=85
6x+15y+2z=72
x+y+54z=110
Dengan nilai awal x0 , y0 , z0 0,0,0
function [X,g,H]=gaussd(A,b,X0,T,N)
H=X0';
n=length(b);
X=X0;
for k=1:N
for i=1:n
s=b(i)-A(i,[1:i-1])*X0([1:i-1])-A(i,[i+1:n])*X0([i+1:n]);
X(i)=s/A(i,i);
end
g=abs(X-X0);
err=norm(g);
relerr=err/(norm(X)+%eps);
X0=X;
H=[H;X0'];
if (err<T)|(relerr<T),
break,
end
end
endfunction