Автор работы: Пользователь скрыл имя, 22 Марта 2012 в 19:30, курсовая работа
Уравнение Пуассона — эллиптическое дифференциальное уравнение в частных производных, которое описывает:
электростатическое поле,
стационарное поле температуры,
поле давления,
поле потенциала скорости в гидродинамике.
Введение 3
1. Простейшая разностная схема «крест». Устойчивость схемы «крест» 6
2. Методы решения сеточных уравнений 11
2.1. Метод простых итераций 11
2.2. Метод простых итераций с оптимальным параметром 12
2.3. Чебышёвское ускорение метода простых итераций 14
2.4. Метод Якоби 15
2.5. Метод Зейделя 16
2.6. Метод верхней релаксации 17
2.7. Попеременно - треугольный итерационный метод 18
3. Сводка результатов по итерационным методам решения сеточных уравнений 21
4. Распараллеливание решения уравнения Пуассона с краевыми условиями Дирихле 22
Заключение 25
Список использованных источников 26
«Unit1.pas»
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Math, Spin, Grids, jpeg, Unit2, Gala;
type
TForm1 = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Edit1: TEdit;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
SpinEdit4: TSpinEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label1: TLabel;
StringGrid4: TStringGrid;
StringGrid5: TStringGrid;
StringGrid6: TStringGrid;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Timer2: TTimer;
Label13: TLabel;
Label15: TLabel;
Label14: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
Group: Integer;
public
{ Public declarations }
end;
TProcess01 = class(TGalaProcess)
protected
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function f(x:extended;y:extended):
begin
f:=power(x,3)+2*y-3*x
end;
Function U_0_y(y:extended):extended;
begin
U_0_y:=power(y,4)+3*y;
end;
Function U_l_y(y:extended):extended;
begin
U_l_y:=power(y,3)+4*y;
end;
Function U_x_0(x:extended):extended;
begin
U_x_0:=2*x+5*sqr(x);
end;
Function U_x_T(x:extended):extended;
begin
U_x_T:=3*x+sqr(x);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,l,T,k,N,M:integer;
u:array [0..100,0..100] of extended;
x:array [0..100] of extended;
y:array [0..100] of extended;
dmax,dm,h1,h2,temp,eps:
t3,t1,t2: TDateTime;
begin
Timer1.Enabled := true;
t1:=Now;
eps:=strtofloat(Edit1.text);
l:=strtoint(SpinEdit1.Text);
T:=strtoint(SpinEdit2.Text);
N:=strtoint(SpinEdit3.text);
M:=strtoint(SpinEdit4.text);
h1:=l/N;
h2:=t/M;
for i:=0 to N do
begin
x[i]:=i*h1;
end;
for j:=0 to M do
begin
y[j]:=j*h2;
end;
for j:=0 to M do
begin
u[0,j]:=U_0_y(y[j]);
u[N,j]:=U_l_y(y[j]);
end;
for i:=0 to N do
begin
u[i,0]:=U_x_0(x[i]);
u[i,M]:=U_x_T(x[i]);
end;
for i:=1 to N-1 do
begin
for j:=1 to M-1 do
u[i,j]:=random(100);
end;
Repeat
begin
dmax:= 0;
for i:=1 to N-1 do
begin
for j:=1 to M-1 do
begin
temp:= u[i,j];
u[i,j]:=0.5*((sqr(h1)*(u[i,j-
dm:= abs(temp-u[i,j]);
if dmax < dm then dmax:= dm;
end;
end;
end;
Until dmax<eps;
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=M+1;
StringGrid2.RowCount:=M+1;
StringGrid3.ColCount:=N+1;
for i:=0 to N do
begin
for j:=0 to M do
StringGrid1.Cells[i,j]:=
end;
for i:=0 to N do
begin
StringGrid2.Cells[i,0]:=
end;
for j:=0 to M do
begin
StringGrid3.Cells[0,j]:=
end;
t2:=Now;
t3:=t2-t1;
LongTimeFormat := 's,zzz';
label1.caption:=timetostr(t3);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,l,T,k,N,M,Kol_Proc,Nomer_
u:array [0..100,0..100] of extended;
x:array [0..100] of extended;
y:array [0..100] of extended;
dmax,dm,h1,h2,temp,eps:
t3,t1,t2: TDateTime;
begin
eps:=strtofloat(Edit1.text);
l:=strtoint(SpinEdit1.Text);
T:=strtoint(SpinEdit2.Text);
N:=strtoint(SpinEdit3.text);
M:=strtoint(SpinEdit4.text);
Kol_Proc:=N;
i:=Nomer_Proc;
h1:=l/N;
h2:=t/M;
Timer2.Enabled := true;
t1:=Now;
for i:=0 to N do
begin
x[i]:=i*h1;
y[i]:=i*h2;
end;
for j:=0 to M do
begin
u[0,j]:=U_0_y(y[j]);
u[N,j]:=U_l_y(y[j]);
end;
for i:=0 to N do
begin
u[i,0]:=U_x_0(x[i]);
u[i,M]:=U_x_T(x[i]);
end;
for i:=1 to Kol_Proc -1 do
begin
for j:=1 to M-1 do
u[i,j]:=random(100);
end;
Repeat
begin
dmax:= 0;
for i:=1 to Kol_Proc -1 do
begin
for j:=1 to M-1 do
begin
temp:= u[i,j];
u[i,j]:=0.5*((sqr(h1)*(u[i,j-
dm:= abs(temp-u[i,j]);
if dmax < dm then dmax:= dm;
end;
end;
end;
Until dmax<eps;
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=M+1;
StringGrid2.RowCount:=M+1;
StringGrid3.ColCount:=N+1;
for i:=0 to N do
begin
for j:=0 to M do
StringGrid4.Cells[i,j]:=
end;
for i:=0 to N do
begin
StringGrid5.Cells[i,0]:=
end;
for j:=0 to M do
begin
StringGrid6.Cells[0,j]:=
end;
t2:=Now;
t3:=t2-t1;
LongTimeFormat := 's,zzz';
label14.caption:=timetostr(t3)
end;
end.
Информация о работе Распараллеливание решения уравнения Пуассона с краевыми условиями Дирихле