Мещанюк (1222518), страница 7
Текст из файла (страница 7)
x,t,nu: extended; //координаты точек графика
i,j,k: integer;
function function_w(t: extended): extended;
begin
if t<t0 then
result:=2*xa*zh*U0*t
else
result:=2*xa*zh*U0*t0;
end;
function function_fn(t: extended; n: integer): extended;
begin
if t<t0 then
result:=u0*sin(gamman*t)
else
result:=2*u0*sin(gamman*t0/2)*cos(gamman*(t–t0/2));
end;
begin
//считать исходные данные
s1:=StrToFloat(Eds1.Text);
s2:=StrToFloat(Eds2.Text);
B0:=StrToFloat(EdB0.Text);
L:=StrToFloat(EdL.Text);
H:=StrToFloat(EdH.Text);
z0:=abs(StrToFloat(EdSel_z0.Text));
x0:=StrToFloat(EdSel_x0.Text);
xa:=StrToFloat(EdSel_xa.Text);
zh:=StrToFloat(EdSel_zh.Text);
t0:=StrToFloat(EdSel_t0.Text);
w0:=StrToFloat(EdSel_w0.Text);
Tmax:=StrToFloat(EdTMax.Text);
g:=9.81;
//считать свойства графика
dt:=StrToFloat(Ed_Dt.Text);
dx:=StrToFloat(Ed_Dx.Text);
N:=StrToInt(EdN.Text);
//создать объект 3д
setlength(FuncsArray,length(FuncsArray)+1);
setlength(TimePoint,length(FuncsArray));
with FuncsArray[length(FuncsArray)–1] do
begin
DefDomain.DefDType:=YoX;
ObjType:=Arr_Points;
FormulaX.IsMathEx:=true;
FormulaY.IsMathEx:=true;
FormulaZ.IsMathEx:=true;
Name:=TimeToStr(Now)+', nu';
IsMathEx:=true;
NumOfLinesY:=round(Tmax/dt); // рисуем график по t от 0 до Tmax
NumOfLinesX:=round(L/dx);
DefDomain.LeftX:=0;
DefDomain.RightX:=L;
DefDomain.LeftXLine:='0';
DefDomain.RightXLine:=EdL.Text;
LinesHomogenity:=true;
DependsOnTime:=false;
// DefDomain.BorderFunctionUp:=analyseFunc2d(DefDomain.RightXline,'t');
// DefDomain.BorderFunctionDown:=analyseFunc2d(DefDomain.LeftXLine)
//предварительно–разовые расчеты
U0:=W0/(2*xa*zh*t0);
//заполнение массива точек
SetLength(PointsAr,1,NumOfLinesX+1,NumOfLinesY+1);
for i := 0 to NumOfLinesX do //x=0*dx..100*dx
for j := 0 to NumOfLinesY do//t=0*dt..100*dt
begin
nu:=0;
x:=0+i*dx;
t:=0+j*dt;
for k := 1 to N do
begin
an:=k*Pi/L;
alphan:=2/L*(exp(–s1/2*(x0–xa))*sin(an*(x0–xa))–
exp(–s1/2*(x0+xa))*sin(an*(x0+xa)));
lambdan:=sqrt(power(an,2)+s1*s1/4+s2*s2/4);
gamman:=sqrt((g*lambdan*(Tanh(lambdan*H)+s2/(2*lambdan))–
g*s2/2 *(Tanh(lambdan*H)*s2/(2*lambdan)+1))/
(Tanh(lambdan*H)*s2/(2*lambdan)+1));
kn:=exp(–(lambdan–s2/2)*(z0+zh/2));
kn:=kn–exp(–(lambdan–s2/2)*(z0–zh/2));
kn:=kn–exp(–(2*lambdan*H–(lambdan+s2/2)*(z0+zh/2)));
kn:=kn+exp(–(2*lambdan*H–(lambdan+s2/2)*(z0–zh/2)));
kn:=kn*2/(1+exp(–2*lambdan*H));
kn:=alphan/(2*B0*lambdan*lambdan)*kn;
{ kn:=alphan/(2*B0*lambdan*lambdan) *
(exp(–(lambdan–s2/2)*(z0+h/2))–
exp(–(lambdan–s2/2)*(z0–h/2))–
exp(–(2*lambdan*H–(lambdan+s2/2)*(z0+h/2)))+
exp(–(2*lambdan*H–(lambdan+s2/2)*(z0–h/2))))*
2/(1+exp(–2*lambdan*H));}
nu:=nu+lambdan*kn*(s1/2*sin(an*x)+an*cos(an*x))/
((1+s2/(2*lambdan)*tanh(lambdan*H))*(lambdan*lambdan–s2*s2/4))*function_fn(t,k);
end;
nu:=exp(–s1/2*x)*(s1/2*function_w(t)/(B0*exp(s1/2*L)–1)–nu);
PointsAr[0,i,j].x:=x;
PointsAr[0,i,j].y:=t;
PointsAr[0,i,j].z:=nu;
PointsAr[0,i,j].IsMathEx:=true;
Form_Paint3d.Caption:='рассчитано точек: '+inttostr(i*NumOfLinesY+j)+'/'+inttostr((NumOfLinesX+1)*(NumOfLinesY+1));
Application.ProcessMessages;
end;
Timer1.Enabled:=true;
TimePoint[length(TimePoint)–1]:=0;
Checked:=true;
func3d_cngd:=true;
end;
end;
ПРИЛОЖЕНИЕ Б
Фрагмент программы 2
program matfis;
var k, i, n:integer; x, t, c1, c2, L1, an, un, gamn, aln, sh, p, a, s, sum:real;
h: array [1..10000] of real; f: text;
ksi, dt, un1: real;
begin
asign(f, ‘urov.pas’);
rewrite (f);
L1=ln(B1/B0)/L;
p:=sqrt(g*h0)*s–sgrt(g)*s*(sqrt(h0)–sqrt(h1))/(1–exp(–s*L));
un=(1–exp(–s*L))/(sqrt(h0)–sqrt(h1));
ksi:=a*ln(sqrt(h0)*a*exp(–s*L)/(sqrt(h0)*a–1+exp(–s*L));
ksi:=–ksi/(sqrt(g)*s*(sqrt(h0)*a–1));
ksi:=ksi;
t:=20;
ksi:=a*ln(sqrt(h0)*a*exp(–s*x)/(sqrt(h0)*a–1+exp(–s*x));
ksi:=–ksi/(sqrt(g)*s*(sqrt(h0)*a–1));
dt:=10;
x:=–dt;
k:=1 to 5000 do
begin
sum:=0;
t:=x+dt;
un:=(1–exp(–s*L))/(sqrt(h0)–sqrt(h1));
ksi:=a*ln(sqrt(h0)*a*exp(–s*x)/(sqrt(h0)*a–1+exp(–s*x));
ksi:=–ksi/(sqrt(g)*s*(sqrt(h0)*a–1));
for n:=1 to 200 do
begin
an:=n*pi/L1;
sh:=L1/200;
aln:=0;
for i:=0 to 200 do
aln:=aln+2*sh*sin(an*i*sh)/L1;
gamn:=sqrt(an*an+c1*c1/4);
p:=(c1*c1/4–gamn*gamn);
if t<=t0 then
begin
un1:=sin(gamn*t)*(–c1/2*sin(an*ksi)–an*cos(an*ksi);
a:=aln*p*un1/(2*sqr(gamn)*gamn);
sum:=sum+un;
end;
else
begin
un1:=sin(gamn*t0)*(–c1/2*sin(an*ksi)–an*cos(an*ksi);
a:=aln*p*un1/(2*sqr(gamn)*gamn);
sum:=sum+un;
end;
end;
a[k]:=2*V0*sqrt(g*h1)*exp(c1*(L1–ksi)/2)*sum/L1;
writeln (f,h[k]:10:5);
writeln (k:10, h[k]:10:5);
end;
close(f);
end.
ПРИЛОЖЕНИЕ В
Блок-схема программы расчета 1
ПРИЛОЖЕНИЕ Г
Блок-схема программы расчета 2
12











