Реализация метода исключения Гаусса-Джордана в Delphi
Это моя домашняя работа из моей школы по устранению Гаусса-Джордана в Дельфах, но... У меня тут есть проблемы...
Я сделал так:
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 ответ
Отказ от ответственности: я ничего не знаю о ликвидации Гаусса-Иордана и никогда не слышал об этом.
Ответ ясен, хотя!
Либо ваша математика выключена, либо вы набираете неправильные цифры.
Как было предложено Мануэллом в первом комментарии к вашему посту, вам нужно посмотреть, какие цифры используются.
Простой способ отладки в консоли, который я использую: writeln('whatever variable: ' + VARIABLE)
,
Вы можете использовать MemoList
если вы находитесь в разработке GUI, чтобы сделать то же самое. Вы будете удивлены результатами иногда.
Также используйте правильные функции для того, что вы хотите floatToStr
а также strToFloat
не то, что вы хотите, вероятно.
Редактировать:
Посмотрел исключение Гаусса-Джордана, также известное как сокращение строк, и оказалось, что это алгебра простых матриц.
Я никогда не знал, что это то, что называют вероятным, потому что, хотя и приписывается Гауссу, это было уже известно китайским математикам в 179 году нашей эры.
Хороший пример можно найти здесь: http://www.youtube.com/watch?v=Xc37YM59vVA
Хороший пример в Delphi, хотя и написан в более ранней версии: язык программирования Delphi-3, с исходным кодом находится здесь
Другой пример, но имеет гораздо больше, чем исключение Гаусса, так что вы должны посмотреть на код можно найти здесь
Вот пример на C++
Так что теперь я уверен, что вы решили это или потеряли свой логин для SO. Удачи и наслаждайтесь процессом, так как это лучшая часть.