andyg0
27.12.2009, 01:01
Здравствуйте. Помогите пожалуйста. Есть программа для решения СЛАУ.
{$R *.dfm}
const n=4;
type matrix_a = array [1..n,1..n] of real;
type matrix_b = array [1..n] of real;
procedure TForm1.Button1Click(Sender: TObject);
var a: matrix_a; b,x,x0: matrix_b;
i,j,k,max_it:integer; s,eps: real; q: Boolean;
begin
max_it:=StrToInt(Edit1.Text);
eps:=StrToFloat(Edit2.Text);
Memo1.Clear;
for i:=1 to n do for j:=1 to n do a[i,j]:=StrToFloat(StringGrid1.Cells[i-1,j-1]);
for i:=1 to n do b[i]:=StrToFloat(StringGrid2.Cells[0,i-1]);
for i:=1 to n do begin x0[i]:=0; x[i]:=0; end;
j:=0; q:=False;
repeat
for i:=1 to n do begin
s:=0; for k:=1 to n do if i<>k then s:=s+a[k,i]*x[k];
x[i]:=(b[i]-s)/a[i,i];
end;
for i:=1 to n do
begin
if abs(x[i]-x0[i])>eps then q:=False else q:=True; x0[i]:=x[i]; end;
inc(j);
until (j=max_it) or q;
Memo1.Lines.Add('Итераций: '+IntToStr(j));
if q=False then Memo1.Lines.Add(IntToStr(j)+'Заданная точность не достигнута');
for i:=1 to n do Memo1.Lines.Add('x['+IntToStr(i)+']='+FloatToStrF(x0[i],ffgeneral,3,3));
end;
Не могли вы объяснить,что вводится в полях лейбл 1 и лейбл 2 и как оно считает это всё. Хотя бы примерные описания некоторых действий. Спасибо.
И как сделать так,чтобы оно в конце наглядно делало проверку этой системы (т.е. подставляло значения получившиеся) Буду очень благодарен за помощь.
{$R *.dfm}
const n=4;
type matrix_a = array [1..n,1..n] of real;
type matrix_b = array [1..n] of real;
procedure TForm1.Button1Click(Sender: TObject);
var a: matrix_a; b,x,x0: matrix_b;
i,j,k,max_it:integer; s,eps: real; q: Boolean;
begin
max_it:=StrToInt(Edit1.Text);
eps:=StrToFloat(Edit2.Text);
Memo1.Clear;
for i:=1 to n do for j:=1 to n do a[i,j]:=StrToFloat(StringGrid1.Cells[i-1,j-1]);
for i:=1 to n do b[i]:=StrToFloat(StringGrid2.Cells[0,i-1]);
for i:=1 to n do begin x0[i]:=0; x[i]:=0; end;
j:=0; q:=False;
repeat
for i:=1 to n do begin
s:=0; for k:=1 to n do if i<>k then s:=s+a[k,i]*x[k];
x[i]:=(b[i]-s)/a[i,i];
end;
for i:=1 to n do
begin
if abs(x[i]-x0[i])>eps then q:=False else q:=True; x0[i]:=x[i]; end;
inc(j);
until (j=max_it) or q;
Memo1.Lines.Add('Итераций: '+IntToStr(j));
if q=False then Memo1.Lines.Add(IntToStr(j)+'Заданная точность не достигнута');
for i:=1 to n do Memo1.Lines.Add('x['+IntToStr(i)+']='+FloatToStrF(x0[i],ffgeneral,3,3));
end;
Не могли вы объяснить,что вводится в полях лейбл 1 и лейбл 2 и как оно считает это всё. Хотя бы примерные описания некоторых действий. Спасибо.
И как сделать так,чтобы оно в конце наглядно делало проверку этой системы (т.е. подставляло значения получившиеся) Буду очень благодарен за помощь.