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