доброго времени суток
цель: реализовать метод LU-разложения для решения СЛАУ размерности 6х6
метод несложный, вроде все верно делаю, а корни неправильные получаются
сама матрица передается в ish_matr, свободные члены в svob_koeffs
type
Tmass=array[1..100] of double;
Tmatrix=array[1..100,1..100] of double;
var
Form1: TForm1;
korni,z:Tmass;
ish_matr:TMatrix; svob_koeffs:TMass;
L,U: TMatrix;
const
krat=6;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
procedure LU(a:TMatrix; free:TMass);
function sum_korni(i,f:integer):double;
var j:integer;
s:double;
begin
s:=0;
case f of
0: for j:=1 to i-1 do s:=s+z[j]*L[i,j];
1: for j:=i+1 to krat do s:=s+korni[j]*U[i,j];
end;
Result:=s;
end;
var
i,j,k:integer;
begin
for i:=1 to krat do
for j:=1 to krat do U[i,j]:=a[i,j];
for i:=1 to krat do begin
for j:=i to krat do begin
L[j,i]:=U[j,i]/U[i,i];
end;
end;
for k:=2 to krat do begin
for i:=k-1 to krat do
for j:=i to krat do
L[j,i]:=U[j,i]/U[i,i];
for i:=k to krat do
for j:=k-1 to krat do
U[i,j]:=U[i,j]-L[i,k-1]*U[k-1,j];
end;
z[1]:=free[1]/L[1,1];
for i:=2 to krat do begin
z[i]:=(free[i]-sum_korni(i,0))/L[i,i];
end;
korni[krat]:=z[krat]/U[krat,krat];
for i:=krat-1 downto 1 do begin
korni[i]:=z[i]-sum_korni(i,1);
end;
end;
var i, j: integer;
begin
...
LU(ish_matr,svob_koeffs);
Memo1.Clear;
for i:=1 to 6 do Memo1.Lines.Add('p['+IntToStr(i)+']='+FloatToStrf(korni[i], ffGeneral, 8, 3));
end;
end.
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://topthenews.com/the-memoirs-of-gambling/