unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, uRunge, Unit2, Unit3, Unit4, Unit5, Perturb,
Runge, Unit6, Unit7, Unit8, Unit9, Unit10, Grids, ExtCtrls;

type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
Label18: TLabel;
Label19: TLabel;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
GroupBox8: TGroupBox;
Button11: TButton;
Button12: TButton;
Edit36: TEdit;
Edit37: TEdit;
Edit38: TEdit;
Edit39: TEdit;
Edit40: TEdit;
Edit41: TEdit;
Edit42: TEdit;
Edit43: TEdit;
Edit44: TEdit;
Edit45: TEdit;
Edit46: TEdit;
Edit47: TEdit;
Edit48: TEdit;
Edit49: TEdit;
Edit50: TEdit;
Edit51: TEdit;
Edit52: TEdit;
Edit53: TEdit;
Label72: TLabel;
Label73: TLabel;
Label74: TLabel;
Label75: TLabel;
Label76: TLabel;
Label77: TLabel;
Label78: TLabel;
Label79: TLabel;
Label80: TLabel;
Label81: TLabel;
Label82: TLabel;
Label83: TLabel;
Label84: TLabel;
Label89: TLabel;
Label90: TLabel;
Label91: TLabel;
Label92: TLabel;
Label93: TLabel;
Label94: TLabel;
Label98: TLabel;
Label99: TLabel;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
Edit54: TEdit;
Edit55: TEdit;
Edit56: TEdit;
Edit57: TEdit;
Edit58: TEdit;
Edit59: TEdit;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Label100: TLabel;
Label101: TLabel;
Label102: TLabel;
Label103: TLabel;
Label104: TLabel;
Label105: TLabel;
Label106: TLabel;
Label107: TLabel;
Label108: TLabel;
Label109: TLabel;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label22: TLabel;
Label28: TLabel;
Label31: TLabel;
Label33: TLabel;
Label37: TLabel;
Label38: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
GroupBox2: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label39: TLabel;
Label45: TLabel;
Label46: TLabel;
Label49: TLabel;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
GroupBox4: TGroupBox;
Label13: TLabel;
Label14: TLabel;
Label57: TLabel;
Label58: TLabel;
Edit13: TEdit;
Edit14: TEdit;
CheckBox1: TCheckBox;
GroupBox3: TGroupBox;
Label11: TLabel;
Label12: TLabel;
Label50: TLabel;
Label51: TLabel;
Edit11: TEdit;
Edit12: TEdit;
Panel1: TPanel;
Edit18: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Edit64: TEdit;
Edit23: TEdit;
Edit19: TEdit;
Edit20: TEdit;
Edit21: TEdit;
Edit22: TEdit;
Panel2: TPanel;
Edit30: TEdit;
Edit31: TEdit;
Edit24: TEdit;
Edit29: TEdit;
Edit26: TEdit;
Edit27: TEdit;
Edit28: TEdit;
Edit25: TEdit;
procedure CheckBox1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
private
Runge : TRunge;
Procedure Optim;


public
{ Public declarations }

end;

var
Form1: TForm1;
x:array[1..50000] of real;
q:array[0..50000] of real;
dX2:array[1..50000] of real;
ProgPath:string;
x1,x2,x3,x4:array[0..50000] of real;
m1, m2, w1,w2,Pt,Pd,SPt,SPd:double;
PPd,PPt,
c1,c2,c1min,c1max,c2min,c2max,
k1,k2,k1min,k1max,k2min,k2max,
m1m2,h,T,x01,x02,
dx01,dx02,Mo,
bcnst,gam0,d1,d2,d3,
Mo1,Dis1,Dism,nfall:double;

IFile:TextFile;
implementation

uses Uprava;
{$R *.dfm}

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked then
begin
CheckBox1.Caption := 'Выключить';
Edit13.Enabled := true;
Edit14.Enabled := true;
end
else
begin
CheckBox1.Caption := 'Включить';
Edit13.Enabled := false;
Edit14.Enabled := false;
end
end;

procedure TForm1.Button3Click(Sender: TObject);
var
i : Integer;
begin
Form3.Series1.Clear;
Form3.Series2.Clear;
Form3.Series3.Clear;
Form3.Series1.AddXY(0,StrToFloat(Edit7.Text),'', clRed);
Form3.Series2.AddXY(0,StrToFloat(Edit9.Text),'', clBlue);
if Runge <> nil then
for i:=1 to Length(Runge.Values) do
begin
Form3.Series1.AddXY(StrToFloat(Form2.StringGrid1.Cells[0,i]), StrToFloat(Form2.StringGrid1.Cells[1,i]), '', clRed);
Form3.Series2.AddXY(StrToFloat(Form2.StringGrid1.Cells[0,i]), StrToFloat(Form2.StringGrid1.Cells[2,i]), '', clBlue);
if CheckBox1.Checked then
Form3.Series3.AddXY(Runge.Values[i].t, Runge.q*sin(Runge.Wq*Runge.Values[i].t) , '', clGreen);
end;
if CheckBox1.Checked then
for i:=1 to Length(Runge.Values) do
Form3.Series3.AddXY(Runge.Values[i].t, Runge.q*sin(Runge.Wq*Runge.Values[i].t) , '', clGreen);




Form3.Show;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
Form8.Show;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;

Form8.StringGrid1.Cells[0,0]:='№ удачн.шага';
Form8.StringGrid1.Cells[1,0]:='Шаг поиска';
Form8.StringGrid1.Cells[2,0]:='C1';
Form8.StringGrid1.Cells[3,0]:='C2';
Form8.StringGrid1.Cells[4,0]:='K1';
Form8.StringGrid1.Cells[5,0]:='K2';
Form8.StringGrid1.Cells[6,0]:='P1';
Form8.StringGrid1.Cells[7,0]:='P2';
Form8.StringGrid1.Cells[8,0]:='J';

Pd:=StrToFloat(Edit51.Text);
Pt:=StrToFloat(Edit53.Text);
SPd:=0;
SPt:=0;

d1:=StrToFloat(Edit50.Text);
d2:=StrToFloat(Edit49.Text);
d3:=StrToFloat(Edit52.Text);

c1:=StrToFloat(Edit2.Text);

c1min:=StrToFloat(Edit41.Text);
c1max:=StrToFloat(Edit45.Text);

c2:=StrToFloat(Edit5.Text);

c2min:=StrToFloat(Edit43.Text);
c2max:=StrToFloat(Edit47.Text);
m1:=StrToFloat(Edit1.Text);
m2:=StrToFloat(Edit4.Text);

k1:=StrToFloat(Edit3.Text);

k1min:=StrToFloat(Edit42.Text);
k1max:=StrToFloat(Edit46.Text);

k2:=StrToFloat(Edit6.Text);

k2min:=StrToFloat(Edit44.Text);
k2max:=StrToFloat(Edit48.Text);

w1:=sqrt(c1/m1);
w2:=sqrt(c2/m2);
m1m2:=m1/m2;

h:=StrToFloat(Edit25.Text);
T:=StrToFloat(Edit24.Text);
x01:=StrToFloat(Edit8.Text);
dx01:=StrToFloat(Edit7.Text);
x02:=StrToFloat(Edit10.Text);
dx02:=StrToFloat(Edit9.Text);
bcnst:=StrToFloat(Edit38.Text);
Gam0:=StrToFloat(Edit36.Text);
//opt
x1[0]:=x01;
x2[0]:=dx01;
x3[0]:=x02;
x4[0]:=dx02;
Optim;
Screen.Cursor := crDefault;
Button12.Enabled:=true;
end;

procedure TForm1.Optim;
const
num_param=4;
var
n1,pbi:byte;
isFallen:boolean;
eps,gam_k,dtau,ddel,dt:real;
Tetta,Si,A1:array[1..4] of real;
i1,i,j,it,jt:LongInt;
s:string;
sigma,alfa_1e,alfa_2e,beta_e,alfa1,alfa2,beta,va,q1,q2,q12,q22,rx1,rx2,dq:real;
q:array[0..50000] of real;

begin
n1:=StrToInt(Edit37.Text);{Кол. неудачных попыток}
eps:=StrToFloat(Edit39.Text);

A1[1]:=C1;
A1[2]:=C2;
A1[3]:=k1;
A1[4]:=k2;

Si[1]:=C1/bcnst;
Si[2]:=C2/bcnst;
Si[3]:=k1/bcnst;
Si[4]:=k2/bcnst;

Dism:=1E+9; {макс. зн. дисперсии}
Gam_k:=Gam0;
nfall:=0;
it:=1;
jt:=0;
pbi:=0;

while Gam_k>eps do
begin
isFallen:=False;
if nfall=10
then
begin
nfall:=0;
Gam_k:=Gam_k/2;
end;

Tetta[1]:=2*random-1;
Tetta[2]:=2*random-1;
Tetta[3]:=2*random-1;
Tetta[4]:=2*random-1;

for j:=1 to num_param do
begin
it:=it+1;
A1[j]:=A1[j]+Si[j]*Tetta[j]*Gam_k;
Case j of
1:begin
Si[1]:=C1/bcnst;
if A1[1]<C1min
then
begin
A1[1]:=C1min;
nfall:=nfall+1;
isFallen:=True;
break;
end;
if A1[1]>C1max
then
begin
A1[1]:=C1max;
nfall:=nfall+1;
isFallen:=True;
break;
end;
end;
2:begin
Si[2]:=C2/bcnst;
if A1[2]<C2min
then
begin
A1[2]:=C2min;
nfall:=nfall+1;
isFallen:=True;
break;
end;
if A1[2]>C2max
then
begin
A1[2]:=C2max;
nfall:=nfall+1;
isFallen:=True;
break;
end;
end;
3:begin
Si[3]:=k1/bcnst;
if A1[3]<k1min
then
begin
A1[3]:=k1min;
nfall:=nfall+1;
isFallen:=True;
break;
end;
if A1[3]>C1max
then
begin
A1[3]:=k1max;
nfall:=nfall+1;
isFallen:=True;
break;
end;
end;
4:begin
Si[4]:=k2/bcnst;
if A1[4]<k2min
then
begin
A1[4]:=k2min;
nfall:=nfall+1;
isFallen:=True;
break;
end;
if A1[4]>k2max
then
begin
A1[4]:=k2max;
nfall:=nfall+1;
isFallen:=True;
break;
end;
end;
end;
w1:=A1[1]/m1;
w2:=A1[2]/m2;
k1:=A1[3];
k2:=A1[4];
sigma:=StrToFloat(Edit18.Text);
alfa_1e:=StrToFloat(Edit15.Text);
alfa_2e:=StrToFloat(Edit16.Text);
beta_e:=StrToFloat(Edit17.Text);
q1:=0;
q12:=0;
q22:=0;
rx1:=0;
q[0]:=0;
va:=35; // m/s
alfa1:=alfa_1e*va;
alfa2:=alfa_2e*va;
beta:=beta_e*va;
i:=1;
Mo1:=0;
Spd:=0;
Spt:=0;
dt:=0;
repeat
i:=i+1;
RandProc(h,alfa1,alfa2,beta,sigma,q1,q12,q22,rx1,q1,q2,rx2);
q22:=q12;
q12:=q2;
rx1:=rx2;
q[i]:=(q1+q2)/6000;
dq:=(q[i]-q[i-1])/h;
RKS(x1[i-1],x2[i-1],x3[i-1],x4[i-1],w1,w2,k1/m1,
k2/m2,m1/m2,h,q[i],dq,t,x1[i],x2[i],x3[i],x4[i]);
Mo1:=Mo1+x1[i];
ddel:=x1[i]-x3[i];
dtau:=x3[i]-q[i];
if dtau<d3
then Spt:=Spt+1;
if (d1<ddel)or(ddel<d2)
then Spd:=Spd+1;
dt:=dt+h;
until dt>=T;
PPd:=Spd/i;
if PPd<Pd {Если вероятность невыброса меньше заданной}
then
begin
nfall:=nfall+1;
Spd:=0;
break;
end;
PPt:=Spt/i;
if PPt<Pt {Если вероятность отрыва меньше заданной}
then
begin
nfall:=nfall+1;
Spt:=0;
break;
end;
Mo1:=Mo1/i;
i1:=0;
Dis1:=0;
repeat
i1:=i1+1;
Dis1:=Dis1+Sqr(x1[i1]-Mo);
until i1>=i;
Dis1:=Dis1/(i-1);
If Dis1<Dism
then
begin
C1:=A1[1];
C2:=A1[2];
k1:=A1[3];
k2:=A1[4];
Dism:=Dis1;
end
else
begin
A1[1]:=C1;
A1[2]:=C2;
A1[3]:=k1;
A1[4]:=k2;
nfall:=nfall+1;
break;
end;
with Form8.StringGrid1 do
begin
jt:=jt+1;
Cells[0,jt]:=IntToStr(it);
Cells[1,jt]:=FloatToStr(Gam_k);
Cells[2,jt]:=FloatToStrF(A1[1],ffFixed,9,2);
Cells[3,jt]:=FloatToStrF(A1[2],ffFixed,9,2);
Cells[4,jt]:=FloatToStrF(A1[3],ffFixed,9,2);
Cells[5,jt]:=FloatToStrF(A1[4],ffFixed,9,2);
Cells[6,jt]:=FloatToStrF(PPd,ffFixed,5,4);
Cells[7,jt]:=FloatToStrF(PPt,ffFixed,5,4);
Cells[8,jt]:=FloatToStrF(Dis1,ffFixed,8,8);
RowCount:=Jt+1;
end;
end;
if isFallen
then Continue;
end;
end;






procedure TForm1.Button13Click(Sender: TObject);
var tx1,tx2,tx3,tx4,tx10,tx10p,tx20,tx20p:Extended;
tm1,tm2,tc1,tc2,tk1,tk2,tw1,tw2,tr1,tr2,
tg,tt,ttmax,th,twq,tq0,tq,tw0,tksi,tksi1,tXs,tb,tu : real;
ti:integer;
begin
Screen.Cursor := crHourGlass;
Form10.StringGrid1.Cells[0,0]:='№';
Form10.StringGrid1.Cells[1,0]:='t, s';
Form10.StringGrid1.Cells[2,0]:='X1(t), m/s';
Form10.StringGrid1.Cells[3,0]:='X2(t), m/s';
Form10.StringGrid1.Cells[4,0]:='U(t), m/s';
tx10p:=StrToFloat(Edit7.Text);
tx10:=StrToFloat(Edit8.Text);
tx20p:=StrToFloat(Edit9.Text);
tx20:=StrToFloat(Edit10.Text);
tm1:=StrToFloat(Edit1.Text);
tm2:=StrToFloat(Edit4.Text);
tc1:=StrToFloat(Edit2.Text);
tc2:=StrToFloat(Edit5.Text);
tk1:=StrToFloat(Edit3.Text);
tk2:=StrToFloat(Edit6.Text);
tq0:=StrToFloat(Edit13.Text);
twq:=StrToFloat(Edit14.Text);
ttmax:=StrToFloat(Edit54.Text);
th:=StrToFloat(Edit55.Text);
tw0:=StrToFloat(edit56.Text);
tksi:=StrToFloat(Edit57.Text);
tXs:=StrToFloat(Edit58.Text);
tb:=StrToFloat(Edit59.Text);
tw1:=sqrt(tc1/tm1);
tw2:=sqrt(tc2/tm2);
tksi1:=tk1/(2*sqrt(tc1*tm1));
tr1:=tk1/tm1;
tr2:=tk2/tm2;
tg:=tm1/tm2;
tt:=0;
tx1:=tx10p;
tx2:=tx10;
tx3:=tx20p;
tx4:=tx20;
Form9.Series1.Clear;
Form9.Series2.Clear;
Form9.Series3.Clear;
// Chart1.Visible:=True;
Form9.Series1.AddXY(tt,tx1,'',clRed);
Form9.Series2.AddXY(tt,tx3,'',clGreen);
Form9.Series3.AddXY(tt,tu,'',clBlue);
Form10.StringGrid1.RowCount:=round(ttmax/th)+2;
ti:=0;
tq:=tq0;


while tt<=ttmax do
begin
tu:=tm1/tb*(sqr(tw0)*(tXs-tx1)-2*tksi*tw0*tx2+2*tksi1*tw1*(tx2-tx4)+sqr(tw1)*(tx1-tx3));
tt:=tt+th;
Rung(tm1,tm2,tc1,tc2,tk1,tk2,th,tt,tu,tb,tx1,tx2,tx3,tx4,tx1,tx2,tx3,tx4);
tq:=tq*sin(twq*tt);
Form10.StringGrid1.Cells[0,ti+1]:=IntToStr(ti);
Form10.StringGrid1.Cells[1,ti+1]:=FloatToStrF(tt,ffFixed,5,4);
Form10.StringGrid1.Cells[2,ti+1]:=FloatToStrF(tx1,ffFixed,5,4);
Form10.StringGrid1.Cells[3,ti+1]:=FloatToStrF(tx3,ffFixed,5,4);
Form10.StringGrid1.Cells[4,ti+1]:=FloatToStrF(tu,ffFixed,5,4);
Form9.Series1.AddXY(tt,tx1,'',clRed);
Form9.Series2.AddXY(tt,tx3,'',clGreen);
Form9.Series3.AddXY(tt,tu,'',clBlue);
inc(ti);
end;
Screen.Cursor := crDefault;
Button14.Enabled:=true;
Button15.Enabled:=true;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
Form9.ShowModal;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
Form10.ShowModal;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
AssignFile(IFile,'date.txt');
Erase(IFile);
Rewrite(IFile);
Writeln(IFile,Edit1.text);
Writeln(IFile,Edit2.text);
Writeln(IFile,Edit3.text);
Writeln(IFile,Edit4.text);
Writeln(IFile,Edit5.text);
Writeln(IFile,Edit6.text);
Writeln(IFile,Edit7.text);
Writeln(IFile,Edit8.text);
Writeln(IFile,Edit9.text);
Writeln(IFile,Edit10.text);
Writeln(IFile,Edit11.text);
Writeln(IFile,Edit12.text);
Writeln(IFile,Edit13.text);
Writeln(IFile,Edit14.text);

Writeln(IFile,Edit15.text);
Writeln(IFile,Edit16.text);
Writeln(IFile,Edit17.text);
Writeln(IFile,Edit18.text);
Writeln(IFile,Edit19.text);
Writeln(IFile,Edit20.text);
Writeln(IFile,Edit21.text);
Writeln(IFile,Edit22.text);
Writeln(IFile,Edit23.text);
Writeln(IFile,Edit64.text);
CloseFile(IFile);
end;

procedure TForm1.Button17Click(Sender: TObject);
var E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14:String;
E15,E16,E17,E18,E19,E20,E21,E22,E23,E64:String;
begin
AssignFile(IFile,'date.txt');
Reset(IFile);
Readln(IFile,E1);
Readln(IFile,E2);
Readln(IFile,E3);
Readln(IFile,E4);
Readln(IFile,E5);
Readln(IFile,E6);
Readln(IFile,E7);
Readln(IFile,E8);
Readln(IFile,E9);
Readln(IFile,E10);
Readln(IFile,E11);
Readln(IFile,E12);
Readln(IFile,E13);
Readln(IFile,E14);

Readln(IFile,E15);
Readln(IFile,E16);
Readln(IFile,E17);
Readln(IFile,E18);
Readln(IFile,E19);
Readln(IFile,E20);
Readln(IFile,E21);
Readln(IFile,E22);
Readln(IFile,E23);
Readln(IFile,E64);




CloseFile(IFile);

Edit1.Text:=E1;
Edit2.Text:=E2;
Edit3.Text:=E3;
Edit4.Text:=E4;
Edit5.Text:=E5;
Edit6.Text:=E6;
Edit7.Text:=E7;
Edit8.Text:=E8;
Edit9.Text:=E9;
Edit10.Text:=E10;
Edit11.Text:=E11;
Edit12.Text:=E12;
Edit13.Text:=E13;
Edit14.Text:=E14;

Edit15.Text:=E15;
Edit16.Text:=E16;
Edit17.Text:=E17;
Edit18.Text:=E18;
Edit19.Text:=E19;
Edit20.Text:=E20;
Edit21.Text:=E21;
Edit22.Text:=E22;
Edit23.Text:=E23;
Edit64.Text:=E64;

end;

end.
Соседние файлы в папке Конечные_Системы(4,5)
  • #
    02.05.20142.34 Кб17Runge.dcu
  • #
    02.05.20143.69 Кб17Runge.pas
  • #
    02.05.201427.58 Кб17Unit1.dcu
  • #
    02.05.201451 б18Unit1.ddp
  • #
    02.05.201431.99 Кб17Unit1.dfm
  • #
    02.05.201416.78 Кб18Unit1.pas
  • #
    02.05.20143.49 Кб17Unit10.dcu
  • #
    02.05.201451 б17Unit10.ddp
  • #
    02.05.2014565 б17Unit10.dfm
  • #
    02.05.2014352 б17Unit10.pas
  • #
    02.05.20143.37 Кб17Unit11.dcu