![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.05.2010
Сообщений: 6
|
![]()
Не могу найти ошибку в программе. Вроде считает, но ответы не сходятся.
метод Гаусса считает правильно,а Зейдель нет. Среда - Дэлфи. Решить СЛАУ методом Гаусса и Зейделя. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, XPMan, jpeg, ExtCtrls; type Vector = array[1..100] of Double; Matrix = array[1..100] of Vector; TForm1 = class(TForm) Button1: TButton; StringGrid1: TStringGrid; StringGrid2: TStringGrid; Memo1: TMemo; Button2: TButton; Edit1: TEdit; Label1: TLabel; XPManifest1: TXPManifest; Button3: TButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; Image1: TImage; Edit2: TEdit; Label5: TLabel; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var a: Matrix; b,x: Vector; h: Double; i,j,k,n:integer; Form1: TForm1; u:extended; implementation {$R *.dfm} //размерность массива procedure TForm1.Button2Click(Sender: TObject); var m:integer; begin m:=strtoint(edit1.text); stringgrid1.colCount:=m; stringgrid1.rowCount:=m; stringgrid2.rowCount:=m; end; // метод Гаусса procedure TForm1.Button1Click(Sender: TObject); var nach,kon:extended; o:integer; begin memo1.clear; nach:=gettickcount(); for o:=1 to 100000 do //Ввод данных n:=StrToIntDef(Text,StringGrid1.Col Count); //Коэффициенты for j:=0 to n-1 do for i:=0 to n-1 do a[i+1,j+1]:=StrToFloatDef(StringGrid1.Cells[j,i],0); //Правая часть уравнения for I:=0 to n-1 do b[i+1]:=StrToFloatDef(StringGrid2.Cells[0,i],0); //Прямой ход - исключение переменных for i:=1 to n-1 do for j:=i+1 to n do begin a[j,i]:=-a[j,i]/a[i,i]; for k:=i+1 to n do a[j,k]:=a[j,k]+a[j,i]*a[i,k]; b[j]:=b[j]+a[j,i]*b[i] end; x[n]:=b[n]/a[n,n]; //Обратный ход - нахождение корней for i:=n-1 downto 1 do begin h:=b[i]; for j:=i+1 to n do h:=h-x[j]*a[i,j]; x[i]:=h/a[i,i] end; kon:=gettickcount(); u:=(kon-nach)/100000; //Вывод результата memo1.lines.Add('Решение методом Гаусса:'); Memo1.Lines.Add(' этот код выполнялся: '+floatToStrf((u),fffixed,12,7)+' msek.'); for i:=1 to n do memo1.lines.add('x('+IntToStr(i)+') ='+ FloatToStr(x[i])); end; //выход procedure TForm1.Button3Click(Sender: TObject); begin Application.Terminate; end; procedure TForm1.Button4Click(Sender: TObject); var s1, s2, s, v, m: extended; eps:real; q:boolean; r:integer; begin n:=strtoint(edit1.text); for j:=0 to n-1 do for i:=0 to n-1 do a[i+1,j+1]:=StrToFloatDef(StringGrid1.Cells[j,i],0); eps:=StrToFloat(Edit2.Text); r:=0; { Исследуем сходимость } For i := 1 to n do begin s := 0; For j := 1 to n do If j <> i then s := s + Abs(a[i, j]); If s >= Abs(a[i, i]) then begin q:=False; end; end; Repeat m := 0; For i := 1 to n do begin { Вычисляем суммы } s1 := 0; s2 := 0; For j := 1 to i - 1 do s1 := s1 + a[i, j] * x[j]; For j := i to n do s2 := s2 + a[i, j] * x[j]; { Вычисляем новое приближение и погрешность } v := x[i]; x[i] := x[i] - (1 / a[i, i]) * (s1 + s2 - b[i]); If Abs(v - x[i]) > m then m := Abs(v - x[i]); end; inc(j); Until m < eps; q:=true; if q=true then begin for i:=1 to n do Memo1.Lines.Add('x'+inttostr(i)+'=' + FloatToStr(x[i])); Memo1.Lines.Add(' Количество итераций: '+IntToStr(j)); end else Memo1.Lines.Add('Метод Зейделя не сходится для данной системы') End; end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal. Решение СЛАУ методом Гаусса-Жордана | 2easy4me | Помощь студентам | 5 | 23.03.2011 18:56 |
Решение СЛАУ методом Зейделя на Delphi | Кнопик | Помощь студентам | 2 | 01.11.2009 13:05 |
Метод Гаусса с выбором главного элемента для решения СЛАУ | lira_slava | Помощь студентам | 3 | 21.05.2009 20:56 |
Решение СЛАУ методом Гаусса с выбором главного элемента | МаXsim | Помощь студентам | 4 | 21.10.2008 19:04 |