Помощь - Поиск - Пользователи - Календарь
Полная версия: LU-разложение
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
marwell
доброго времени суток
цель: реализовать метод 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.

прямой и обратный ход делал как тут показано
nishaknapp
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. The Memoirs of Gambling
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.