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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by andyg0, 27 Dec 2009.

  1. andyg0

    andyg0 New Member

    Joined:
    14 Jun 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Помогите пожалуйста. Есть программа для решения СЛАУ.
    Code:
    {$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 и как оно считает это всё. Хотя бы примерные описания некоторых действий. Спасибо.
    И как сделать так,чтобы оно в конце наглядно делало проверку этой системы (т.е. подставляло значения получившиеся) Буду очень благодарен за помощь.
     
  2. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    http://www.srcc.msu.su/num_anal/lib_na/cat/as/ass2r.htm
     
    1 person likes this.
  3. andyg0

    andyg0 New Member

    Joined:
    14 Jun 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Ого,спасибо за оперативный ответ,но я там почти ничего не понял. По скольку делфи у нас очень "хорошо" преподавалось и я очень "хорошо" всё это усвоил. Если можно вон по конкретно моему примеру. И с проверкой как быть? Я не разбираюсь в программировании (( и мне это всё в делфи надо.
    я так понял,
    Label1 Caption='макс.ит.' максимальная итернация (как я понял,повторение)
    Label2 Caption='eps' (а это не знаю)
    Зачем нужны эти повторения и епс? и что они делают?
     
    #3 andyg0, 27 Dec 2009
    Last edited: 27 Dec 2009
  4. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Если я не ошибаюсь то тут используется уравнение Маклорена.
    Eps определяет точность измерений!(т.е. погрешность)
    А кол-во инетераций используется, чтобы твоя программа не зациклилась!если в ней ошибка