Rabu, 20 Juni 2012

program gauss jordan

Metode ini merupakan pengembangan metode eliminasi Gauss, hanya saja augmented matrik, pada sebelah kiri diubah menjadi matrik diagonal sebagai berikut:
Penyelesaian dari persamaan linier simultan diatas adalah nilai d1,d2,d3,…,dn dan atau:
Teknik yang digunakan dalam metode eliminasi Gauss-Jordan ini sama seperti metode eliminasi Gauss yaitu menggunakan OBE (Operasi Baris Elementer). Hanya perhitungan penyelesaian secara langsung diperoleh dari nilai pada kolom terakhir dari setiap baris.
Algoritma Metode Eliminasi Gauss-Jordan adalah sebagai berikut:
  1. Masukkan matrik A, dan vektor B beserta ukurannya n
  2. Buat augmented matrik [A|B] namakan dengan A
  3. Untuk baris ke i dimana i=1 s/d n
    • Perhatikan apakah nilai ai,i sama dengan nol :
      Bila ya :
      pertukarkan baris ke i dan baris ke i+k≤n, dimana ai+k,i tidak sama dengan
      nol, bila tidak ada berarti perhitungan tidak bisa dilanjutkan dan proses
      dihentikan dengan tanpa penyelesaian.Bila tidak : lanjutkan
    • Jadikan nilai diagonalnya menjadi satu, dengan cara untuk setiap kolom k
      dimana k=1 s/d n+1, hitung
  4. Untuk baris ke j, dimana j = i+1 s/d n
    Lakukan operasi baris elementer: untuk kolom k dimana k=1 s/d n, Hitung
  5. Penyelesaian, untuk i = n s/d 1 (bergerak dari baris ke n sampai baris pertama)
Berikut ini salah satu program menggunakan bahasa pascal untuk menyelesaikan persamaan Linear Simultan dengan metode Gauss Jordan :
uses crt;Const Max = 25;
Type
Matrik = record
Row, col : byte;
Element : array [1..max, 1..max] of real;
End;
Vektor = record
Row : byte;
Element : array [1..max] of real;
End;
Var
x, b : vektor;
A : matrik;
n : integer;
c : real;
Error : boolean;
Procedure masukkandata;
Var i,j : byte;
Begin
Writeln(‘Penyelesaian Persamaan Linier dengan Metode Gauss Jordan’);
Write (‘Jumlah persamaan :’);
Readln (n);
A.row := n;
A.col := n ;
b.row := n;
for i := 1 to n do
begin
writeln (‘Persamaan ke ‘,i );
for j := 1 to n do
begin
write (‘X[',i,',',j,'] = ‘);
readln (A.element[i,j]);
end;
write(‘Y[',i,']   = ‘); readln(A.element[i,n+1]);
writeln;
end;
end;
procedure eliminasigauss;
var I,j,k : integer;
temp, S : real;
Begin
Error := false;
For i := 1 to n do
Begin
If (A.element[i,i] = 0 ) then
Begin
write(A.element[i,i]) ;
Error := true;
Exit;
End;
temp := A.element[i,i];
for k := 1 to n+1 do
begin
A.element[i,k] := A.element[i,k] / temp;
end;
For j := 1  to n do
begin
if(j<>i) then
begin
c := A.element[j,i];
for k := 1 to n+1 do
begin
A.element[j,k] := A.element [j,k] – (c * A.element[i,k]);
end;
end;
end;
end;
x.row := n;
for i := n downto 1 do
begin
if (A.element [i,i] = 0.0 ) then
Begin
Error := true;
Exit;
End;
x.element[i] := A.element[i,n+1];
end;
end;
Procedure tulishasil;
Var i : byte;
Begin
If (error) then
Begin
Writeln (‘Persamaan simultan linear tidak dapat diselesaikan’);
End
Else
Begin
Writeln;
Writeln (‘Penyelesaian persamaan linear dengan Gauss Jordan : ‘);
For i := 1 to x.row do
Writeln(‘X’,i,’ = ‘,x.element[i]:6:2);
End;
End;
Begin
clrscr;
Masukkandata;
Eliminasigauss;
Tulishasil;
readln;
End.

Tidak ada komentar:

Posting Komentar