PDA

Просмотр полной версии : Решение СЛАУ методом Зейделя на Делфи(объяснения)


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 и как оно считает это всё. Хотя бы примерные описания некоторых действий. Спасибо.
И как сделать так,чтобы оно в конце наглядно делало проверку этой системы (т.е. подставляло значения получившиеся) Буду очень благодарен за помощь.

preda1or
27.12.2009, 01:02
http://www.srcc.msu.su/num_anal/lib_na/cat/as/ass2r.htm

andyg0
27.12.2009, 01:06
Ого,спасибо за оперативный ответ,но я там почти ничего не понял. По скольку делфи у нас очень "хорошо" преподавалось и я очень "хорошо" всё это усвоил. Если можно вон по конкретно моему примеру. И с проверкой как быть? Я не разбираюсь в программировании (( и мне это всё в делфи надо.
я так понял,
Label1 Caption='макс.ит.' максимальная итернация (как я понял,повторение)
Label2 Caption='eps' (а это не знаю)
Зачем нужны эти повторения и епс? и что они делают?

ZnikiR
27.12.2009, 01:26
Если я не ошибаюсь то тут используется уравнение Маклорена.
Eps определяет точность измерений!(т.е. погрешность)
А кол-во инетераций используется, чтобы твоя программа не зациклилась!если в ней ошибка