Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 20:51   #1
[ICQ]
 
Регистрация: 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.
[ICQ] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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