Delphi中的实现方法Gauss Jordan消除

时间:2013-12-22 00:29:03

标签: arrays delphi stringgrid

这是我学校的作业,在德尔福进行高斯 - 乔丹淘汰,但是......我在这里遇到了一些问题......

我是这样做的:

procedure TForm1.Button3Click(Sender: TObject);
var
  n,i,j,k,bar,kol:integer;
  a:array [1..100,1..100]of real;
  x:array [1..100]of real;
  faktor:real;
begin
  memo1.Clear;
  n:=stringgrid2.RowCount-1;
  kenalmatriks;
  StringGrid2.RowCount := baris;
  StringGrid2.ColCount := kolom;

  for i:=1 to n do
  begin
    for j:=1 to n+1 do
    begin
      a[i,j]:=strtofloat(stringgrid1.cells[j,i]);
    end;
  end;

  for k:=1 to n do
  begin
    faktor:=a[k,k];
    for j:=1 to n+1 do
    begin
      a[j,k]:=a[j,k]/faktor;
    end;
    for i:=1 to n do
    begin
      if i<>k then
      begin
        faktor:=a[i,k];
        for j:=1 to n+1 do
        begin
          a[i,j]:=a[i,j]-faktor*a[k,j];
        end;
      end;
    end;
  end;

  for bar:=1 to n do
  begin
    for kol:=1 to n+1 do
    begin
      stringgrid2.cells[kol,bar]:=floattostr(a[bar,kol]);
    end;
  end;
end;

结果必须如下:

1   0   0   2
0   1   0   7
0   0   1   -3

但是,我的:

--   --   --   --
--   1    0    15.33
--   0    1    2

我希望我能完成这个...... :( 任何人......请帮忙......

1 个答案:

答案 0 :(得分:1)

免责声明:我对Gauss-jordan淘汰一无所知,也从未听说过。

但答案很清楚!

要么你的数学已经关闭,要么你正在抓错号码。

正如manuell在您发布的第一条评论中所建议的那样,您需要查看正在使用的数字。

在我使用的控制台中调试的一种简单方法是:writeln('whatever variable: ' + VARIABLE)

如果您在GUI开发中执行同样的操作,则可以使用MemoList。有时您会对结果感到惊讶。

也可以根据需要使用正确的功能floatToStrstrToFloat不是您想要的。

修改

查找Gauss-jordan消除也称行减少,结果证明是简单的矩阵代数。

我从来不知道那可能被称为可能,因为虽然归因于高斯,但在公元179年对于中国数学家来说是already known

这里有一个很好的例子:http://www.youtube.com/watch?v=Xc37YM59vVA

Delphi中的一个很好的例子,尽管用早期版本编写:Delphi-3编程语言,找到源代码here

另一个例子,但不仅仅是高斯消除,所以你必须查看可以找到的代码here

Here是C ++中的一个例子

所以现在我确定你已经解决了它或丢失了你的登录信息。祝你好运,享受这个过程,因为这是最好的部分。