Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Обратная матрица методом Гаусса


Автор: Amurka 18.11.2008, 00:45
Ребят, необходимо найти обратную матрицу методом Гаусса. Есть код (ниже). 
Помогите определить реализуется ли в данном коде метод Гаусса

http://http://ru.wikipedia.org/wiki/Обратная_матрица#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4_.D0.93.D0.B0.D1.83.D1.81.D1.81.D0.B0

У меня есть следующий код на Delphi:
Код

var
  Form1: TForm1;
  kol: integer;
  obr: array[0..300, 0..300] of real;

implementation

{$R *.dfm}

procedure Obratis;
var k, i, j: integer;
    b: array[0..300, 0..300] of real;
begin
 for k:=0 to kol - 1 do
 begin
      for i:=0 to kol - 1 do
       for j:=0 to kol - 1 do
       begin
            if (i=k) and (j=k) then
               b[i,j] := 1/obr[i,j];
               if (i=k) and (j<>k) then
                  b[i,j] := -obr[i,j]/obr[k,k];
               if (i<>k) and (j=k) then
                  b[i,j] := obr[i,k]/obr[k,k];
               if (i<>k) and (j<>k) then
                  b[i,j] := obr[i,j] - obr[k,j] * obr[i,k]/obr[k,k];
       end;
      for i:= 0 to kol - 1 do
       for j:= 0 to kol - 1 do obr[i, j]:= b[i, j];
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 exit;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 kol:= SpinEdit1.Value;
 StringGrid1.ColCount:= kol;
 StringGrid1.RowCount:= kol;
 StringGrid2.ColCount:= kol;
 StringGrid2.RowCount:= kol;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
begin
 randomize;
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid1.Cells[i, j]:= IntToStr(random(100) - 50);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 kol:= 1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, j: integer;
    i1, j1: integer;
begin
 i1:= 1;
 j1:= 1;
 try
  for i:= 0 to kol - 1 do
    for j:= 0 to kol - 1 do
    begin
      i1:= i;
      j1:= j;
      obr[i, j]:= StrToFloat(StringGrid1.Cells[j, i]);
    end;
 except
  ShowMessage('Ошибка при вводе числа в столбце ' + IntToStr(j1 + 1) + ' строке ' + IntToStr(i1 + 1) + '!');
  exit;
 end;

 Obratis;
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid2.Cells[i, j]:= FloatToStr(Round(1000*obr[j, i])/1000);
end;

end.



M
Alexeis
Модератор: используйте подсветку кода.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)