- •Содержание
- •Теоретические методы реализации задачи
- •Постановка задачи, исходные данные
- •Описание математических функций и методов
- •Реализация методов
- •Основные понятия, цели и задачи
- •Описание интерфейса программы
- •Диалоговое окно программы разделено на 3 части:
- •Описание результатов решения
- •Тестирование
- •Список использованной в работе литературы и интернет ресурсов
- •Приложение
Приложение
Исходный код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
GroupBox2: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Edit8: TEdit;
Label10: TLabel;
Edit9: TEdit;
Label5: TLabel;
Edit10: TEdit;
Label11: TLabel;
Image1: TImage;
BitBtn1: TBitBtn;
procedure Inicialization;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Dy,Dz,R0,Rmax:integer;
implementation
{$R *.dfm}
procedure TForm1.Inicialization;
begin
Dy:=StrToInt(Edit1.Text);
Dz:=StrToInt(Edit2.Text);
R0:=StrToInt(Edit3.Text);
Rmax:=StrToInt(ComboBox1.Text);
end;
function Pow(chislo, stepen:real):real;
var per:real;
b:integer;
a:string;
begin
Per:= Abs(chislo);
a:=FloatToStr(stepen);
b:=length(a);
a:=a[length(a)];
b:=StrToInt(a);
b:=b mod 2;
if (chislo=0) and (stepen<>0) then Pow:=0
else if (chislo<0) and (b=1)
then Pow:=(-1)*Exp((stepen)*Ln(per))
else Pow:=Exp((stepen)*Ln(per));
end;
function gamma(z:real):real;
var i,fact:integer;
tmp1,tmp2:real;
begin
if Frac(z)=0
then begin
fact:= 1;
for i:=2 to round(z) do fact:= fact * i;
gamma:=fact;
end
else begin
tmp1:= sqrt(2*PI/z);
tmp2:= z + 1.0/(12 * z - 1.0/(10*z));
tmp2:= pow(tmp2/Exp(1),z);
gamma:= tmp1*tmp2;
end;
end;
function f(t,k:real):real;
var i,n:integer;
h,r,rez:real;
x,y,l:real;
begin
i:=0; h:=Frac(k);
if k > int(k) then n:=Round(int(k))+1
else n:=Round(int(k));
rez:=1;
for i:=1 to n do begin
r:=i-1+h;
rez:=rez+pow(-1,int(r)+1)*((pow(t/2,2*r))/pow(gamma(r),2));
end;
f:=Exp(-t)*rez;
end;
function Simpson(t1,t2,k: real): real;
var
h,s0,s,eps: real;
n,i:integer;
begin
eps:=0.00001;
n:=100;
s:=0;
repeat
h:=(t2-t1)/n; s0:=s;
s:=f(t1,k)+f(t2,k);
for i:=1 to n-1 do
s:=s+2*(1+i mod 2)*f(t1+i*h,k);
s:=s*h/3;
until abs(s-s0) <= eps;
Simpson:=s;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var a1,a2,k,T0,T,Integ,P1_0:real;
begin
Inicialization;
a1:=Dy/Dz;
a2:=Dy/R0;
k:=abs((1-a1*a1)/(1+a1*a1+2*a2*a2));
T0:=StrToFloat(Edit8.Text);
T:=(1+a1*a1+2*a2*a2)/(4*Dy*Dy)*Rmax*Rmax;
Integ:=Simpson(T0,T,k);
P1_0:=(4*Dy*Dz*R0*R0)/((Dy*Dy+Dz*Dz)*R0*R0+2*Dy*Dy*Dz*Dz);
P1_0:=P1_0*Integ;
Edit4.Text:=FloatToStr(a1);
Edit5.Text:=FloatToStr(a2);
Edit6.Text:=FloatToStr(k);
Edit7.Text:=FloatToStr(T);
Edit9.Text:=FloatToStr(Integ);
Edit10.Text:=FloatToStr(P1_0);
end;
end.
Приложение 1
function gamma(z:real):real;
var i,fact:integer;
tmp1,tmp2:real;
begin
if Frac(z)=0
then begin
fact:= 1;
for i:=2 to round(z) do fact:= fact * i;
gamma:=fact;
end
else begin
tmp1:= sqrt(2*PI/z);
tmp2:= z + 1.0/(12 * z - 1.0/(10*z));
tmp2:= pow(tmp2/Exp(1),z);
gamma:= tmp1*tmp2;
end;
end;
Приложение 2
function Simpson(t1,t2,k: real): real;
var
h,s0,s,eps: real;
n,i:integer;
begin
eps:=0.00001;
n:=100;
s:=0;
repeat
h:=(t2-t1)/n; s0:=s;
s:=f(t1,k)+f(t2,k);
for i:=1 to n-1 do
s:=s+2*(1+i mod 2)*f(t1+i*h,k);
s:=s*h/3;
until abs(s-s0) <= eps;
Simpson:=s;
end;