Раздел «Алгоритмы».LinearEquationsPAS:

Решение систем линейных уравнений на Pascal

//(C) Igor Kvasov
{решение систем линейных уравнений методом LUP-разложения}
const
  maxn = 1000;
var
  i,j,k,n,buf1,kmax:longint;
  buf2,max:extended;
  a:array[1..maxn,1..maxn]of extended;
  x,y,b:array[1..maxn]of extended;
  p:array[1..maxn]of longint;

begin
  read(n);
  for i:=1 to n do begin
    for j:=1 to n do read(a[i,j]);
    read(b[i]);
  end;
  for i:=1 to n do p[i]:=i;
  for k:=1 to n do begin
    max:=0;
    for i:=k to n do if abs(a[i,k])>max then begin
      max:=abs(a[i,k]);
      kmax:=i;
    end;
    if max=0 then halt;
    buf1:=p[k]; p[k]:=p[kmax]; p[kmax]:=buf1;
    for i:=1 to n do begin
      buf2:=a[k,i]; a[k,i]:=a[kmax,i]; a[kmax,i]:=buf2;
    end;
    for i:=k+1 to n do  begin
      a[i,k]:=a[i,k]/a[k,k];
      for j:=k+1 to n do a[i,j]:=a[i,j]-a[i,k]*a[k,j];
    end;
  end;
  for i:=1 to n do begin
    y[i]:=b[p[i]];
    for j:=1 to i-1 do y[i]:=y[i]-a[i,j]*y[j];
  end;
  for i:=n downto 1 do begin
    x[i]:=y[i];
    for j:=i+1 to n do x[i]:=x[i]-a[i,j]*x[j];
    x[i]:=x[i]/a[i,i];
  end;
  for i:=1 to n do writeln(x[i]:0:5);
end.

-- IgorKvasov? - 28 Dec 2004

AlgorithmClasifyForm
Type: Код
Scope: Математика
Strategy:  
Complexity: Low