Arrays Gauss-Jordan消去法在Delphi中的实现
这是我学校的家庭作业,在德尔福做高斯-乔丹消去法,但是…我这里有一些问题 我这样做:Arrays Gauss-Jordan消去法在Delphi中的实现,arrays,delphi,stringgrid,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;
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
我希望我能完成这个…:(
任何人……请帮助……免责声明:我对高斯-乔丹消去法一无所知,也从未听说过 答案很清楚 要么你的数学不及格,要么你抓错了数字 正如manuell在你文章的第一条评论中所建议的那样,你需要看看使用了哪些数字 我在控制台中使用的一种简单调试方法是:
writeln('whatever variable:'+variable)
如果您正在进行GUI开发,您可以使用备忘录列表来做同样的事情。有时您会对结果感到惊讶
另外,为您想要的使用正确的函数floatToStr
和strToFloat
可能不是您想要的
编辑:
查一查高斯-乔丹消去法,也就是行归约法,结果证明它是一个简单的矩阵代数
我从来不知道这就是所谓的“可能”,因为尽管这是高斯的功劳,但它却是公元179年中国数学家的功劳
这里有一个很好的例子:
在Delphi中有一个很好的例子,虽然是用早期版本Delphi-3编程语言编写的,但有源代码
另一个例子,但有远远超过高斯消去,所以你要看的代码可以找到
是C语言中的一个例子++
所以现在我确信你已经解决了这个问题,或者失去了登录So的权限。祝你好运,享受这个过程,因为这是最好的部分。你尝试过使用调试器吗?如果你想要整数,为什么要使用strtofloat
呢?我们现在知道了预期的输出,但不知道输入值是什么。请努力并展示一个完整的示例e、 这里似乎有不止一个问题,数组从1,1开始,但从stringgrid访问值,该值从0,0开始(stringgrid1.cells[0,0]将是左上角的值)。只要我们不知道你的stringgrid是什么样子,我会说你错过了一些值。你必须按照我告诉你的至少一次的方法来做。制作一个SSCCE。一个完整的程序。它包含硬编码的输入。没有GUI。一个控制台应用程序,可以将输出打印到控制台。我们可以粘贴到我们的编译器中。Gauss Jordan很简单。一次您提供的SSCCE我们将能够更正。请记住将数字代码与输出分开。不要将数学和GUI混用。永远不要。