Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Delphi .NET
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2010, 19:51
greenfey greenfey вне форума
Прохожий
 
Регистрация: 12.05.2010
Сообщения: 1
Репутация: 10
По умолчанию помогите сделать блок-схему к методу зейделя (код есть)

есть программа, но затрудняюсь к ней нарисовать блок-схему..
помогите плиз)

вот тут прога -->

Код:
{Решение СЛАУ методом Зейделя
 Идея: задана основная матрица A и вектор B
 Сначала нормализуем матрицу и вектор.
 Вычисляется транспонированная матрица A ,т.е A^t;
 Выполняются действия: A'=(A^t)*A; B'=(A^t)*b
 Далее операции выполняются над этими матрицами
 Случайным образом задается вектор X(x1,x2,..,xn);
 Далее вычисляется вектор Xk через Xk-1.

}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
	Dialogs, StdCtrls, Grids,MAth;

type
  Matrix=array [1..10,1..10] of Real;
  Vector=array [1..10] of Real;
  TForm1 = class(TForm)
    Ad: TStringGrid;
    Calculate: TButton;
    edEpsilon: TEdit;
    Bd: TStringGrid;
		edN: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Cd: TStringGrid;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure CalculateClick(Sender: TObject);
    procedure edNChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  eps  : Real;
  n    : Byte;
  A    : Matrix;
  B    : Vector;


implementation

{$R *.dfm}

procedure TForm1.CalculateClick(Sender: TObject);
var
  i,j,k  : Byte;
  atr : Matrix;
  tt  : Real;
  A1  : Matrix;
  A2  : Matrix;
  B1  : Vector;
  X   : vector;
  X1  : vector;

function CheckConds:Boolean;
{Условие прекращения вычислений}
var
  l : Byte;
  mm : Real;
begin
mm:=abs(X1[1]-X[1]);
for l:=2 to n do begin
if mm<abs(X1[l]-X[l])
  then mm:=abs(X1[l]-X[l]);

  if  mm<eps then CheckConds:=true else CheckConds:=false;
end;

end;

procedure CalculateNextX;
var
  l,m : Byte;
  zz  : real;
begin
for l:=1 to n do begin
  zz:=(B[l]/A[l,l]);
  for m:=1 to n do begin
    if m=l then continue;
    zz:=zz-(A[l,m]*X[m]/A[l,l])
  end;
  X[l]:=zz;
end;
end;

begin
n:=StrToInt(edN.Text);
eps:=StrToFloat(edEpsilon.Text);


for i:=0 to n-1 do begin
  for j:=0 to n-1 do begin
    A[i+1,j+1]:=StrToFloat(Ad.Cells[j,i]);
  end;
	B[i+1]:=StrToFloat(Bd.Cells[0,i]);
end;

A1:=A;

for i:=1 to n do begin
  for j:=i to n do begin
    tt:=A1[i,j];
    A1[i,j]:=A1[j,i];
    A1[j,i]:=tt;
  end;
end;

for i:=1 to n do begin
  for j:=1 to n do begin
  tt:=0;
    for k:=1 to n do begin
      tt:=tt+A1[i,k]*A[k,j]
    end;
   A2[i,j]:=tt;
  end;
end;


for i:=1 to n do begin
  tt:=0;
  for k:=1 to n do begin
    tt:=tt+A1[i,k]*B[k];
  end;
  B1[i]:=tt;
end;
A:=A2;
B:=B1;

for i:=1 to n do
	X[i]:=0;


repeat
X1:=X;
CalculateNextX;
until CheckConds;

for i:=0 to n-1 do begin
		Cd.Cells[0,i]:=FloatToStr(RoundTo(X[i+1],-10));
end;


end;

procedure TForm1.edNChange(Sender: TObject);
var
	z : Byte;
begin
z:=StrToInt(edN.Text);
AD.RowCount:=z;
AD.ColCount:=z;
Cd.RowCount:=z;
Bd.RowCount:=z;
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter