Скачиваний:
17
Добавлен:
02.05.2014
Размер:
7.94 Кб
Скачать
unit Form;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, ComCtrls, StdCtrls,
Series, Grids;

type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet3: TTabSheet;
Panel4: TPanel;
Label97: TLabel;
Label109: TLabel;
Label110: TLabel;
Label112: TLabel;
Label113: TLabel;
Label115: TLabel;
Label116: TLabel;
Label117: TLabel;
Label122: TLabel;
Label123: TLabel;
Label124: TLabel;
Label99: TLabel;
Label101: TLabel;
Label104: TLabel;
Label111: TLabel;
Label114: TLabel;
Label91: TLabel;
Label92: TLabel;
Label93: TLabel;
btnCalc3: TButton;
edt_P2: TEdit;
edt_P1: TEdit;
edt_delta_1m: TEdit;
edt_delta_1p: TEdit;
edt_delta_2p: TEdit;
edt_dV: TEdit;
edt_Vmax: TEdit;
ResGrid: TStringGrid;
Panel5: TPanel;
Chart4: TChart;
Series_P1: TLineSeries;
Series_P2: TLineSeries;
Chart5: TChart;
Series_I: TLineSeries;
Panel2: TPanel;
Label82: TLabel;
Label81: TLabel;
Label80: TLabel;
Label79: TLabel;
Label78: TLabel;
Label77: TLabel;
Label76: TLabel;
Label75: TLabel;
Label74: TLabel;
Label73: TLabel;
Label72: TLabel;
Label70: TLabel;
Label71: TLabel;
Label69: TLabel;
Label68: TLabel;
Label67: TLabel;
Label66: TLabel;
Label65: TLabel;
Label64: TLabel;
Label63: TLabel;
Label62: TLabel;
Label61: TLabel;
Label60: TLabel;
Label59: TLabel;
Label58: TLabel;
Label57: TLabel;
Label56: TLabel;
Label55: TLabel;
Label54: TLabel;
Label53: TLabel;
Label52: TLabel;
edt_delta_tau: TEdit;
edt_tau_max: TEdit;
edth: TEdit;
edt_T_k: TEdit;
edt_V_a: TEdit;
edt_beta_e: TEdit;
edt_alfa_2e: TEdit;
edt_alfa_1e: TEdit;
edt_A2: TEdit;
edt_A1: TEdit;
edt_sigma_q: TEdit;
Panel1: TPanel;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Label1: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label2: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
Label4: TLabel;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
Label43: TLabel;
Label44: TLabel;
Label45: TLabel;
Label46: TLabel;
Label47: TLabel;
Label48: TLabel;
Label49: TLabel;
Label5: TLabel;
Label50: TLabel;
Label51: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
edt_c2: TEdit;
edt_dx1_0: TEdit;
edt_dx2_0: TEdit;
edt_eta1: TEdit;
edt_eta2: TEdit;
edt_gamma: TEdit;
edt_h: TEdit;
edt_k1: TEdit;
edt_k2: TEdit;
edt_ksi1: TEdit;
edt_ksi2: TEdit;
edt_m1: TEdit;
edt_m2: TEdit;
edt_omega_q: TEdit;
edt_omega1: TEdit;
edt_omega2: TEdit;
edt_q0: TEdit;
edt_tk: TEdit;
edt_x1_0: TEdit;
edt_x2_0: TEdit;
PB1: TProgressBar;
Label83: TLabel;
edt_c1: TEdit;
Label3: TLabel;
procedure btnCalc3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Runge, Perturb, Monte_Carlo;

{$R *.dfm}

procedure TForm1.btnCalc3Click(Sender: TObject);
var
Y,DY:Vector;
i,cnt:integer;
Xx:array of extended;
Mx,Dx:extended;
begin
try
sigma_q:=StrToFloat(edt_sigma_q.Text);
A1:=StrToFloat(edt_A1.Text);
A2:=1-A1;
edt_A2.Text:=FloatToStr(A2);
alfa_1e:=StrToFloat(edt_alfa_1e.Text);
alfa_2e:=StrToFloat(edt_alfa_2e.Text);
beta_e:=StrToFloat(edt_beta_e.Text);
V_a:=StrToFloat(edt_V_a.Text);
Tk_1:=StrToFloat(edt_tk.Text);
h_1:=StrToFloat(edt_h.Text);
tau_max:=StrToFloat(edt_tau_max.Text);
delta_tau:=StrToFloat(edt_delta_tau.Text);

except
on EConvertError do
begin
Application.MessageBox('Значение параметра должно быть числовым','Ошибка');
exit;
end
end;
alfa_1:=alfa_1e*V_a;
alfa_2:=alfa_2e*V_a;
beta:=beta_e*V_a;
GenX();
Generate();
try
m1:=StrToFloat(edt_m1.Text);
m2:=StrToFloat(edt_m2.Text);
c1:=StrToFloat(edt_c1.Text);
c2:=StrToFloat(edt_c2.Text);
k1:=StrToFloat(edt_k1.Text);
k2:=StrToFloat(edt_k2.Text);
t:=0;
tk:=StrToFloat(edt_tk.Text);
h:=StrToFloat(edt_h.Text);
q0:=StrToFloat(edt_q0.Text);
omega_q:=StrToFloat(edt_omega_q.Text);
Y[1]:=StrToFloat(edt_x1_0.Text);
Y[2]:=StrToFloat(edt_dx1_0.Text);
Y[3]:=StrToFloat(edt_x2_0.Text);
Y[4]:=StrToFloat(edt_dx2_0.Text);
except
on EConvertError do
begin
Application.MessageBox('Значение параметра должно быть числовым','Ошибка');
exit;
end
end;
omega1:=sqrt(c1/m1);
omega2:=sqrt(c2/m2);
ksi1:=k1/(2*sqrt(c1*m1));
ksi2:=k2/(2*sqrt(c2*m2));
eta1:=k1/m1;
eta2:=k2/m2;
gamma:=m1/m2;
edt_omega1.Text:=FloatToStr(omega1/(2*pi));
edt_omega2.Text:=FloatToStr(omega2/(2*pi));
edt_ksi1.Text:=FloatToStr(ksi1);
edt_ksi2.Text:=FloatToStr(ksi2);
edt_eta1.Text:=FloatToStr(eta1);
edt_eta2.Text:=FloatToStr(eta2);
edt_gamma.Text:=FloatToStr(gamma);
try
delta_1m:=StrToFloat(edt_delta_1m.Text);
delta_1p:=StrToFloat(edt_delta_1p.Text);
_P1:=StrToFloat(edt_P1.Text);
_P2:=StrToFloat(edt_P1.Text);
delta_2p:=(m1+m2)/c1;
edt_delta_2p.Text:=FloatToStr(delta_2p);
Vmax:=StrToFloat(edt_Vmax.Text);
dV:=StrToFloat(edt_dV.Text);
except
on EConvertError do
begin
Application.MessageBox('Значение параметра должно быть числовым','Ошибка');
exit;
end
end;

Series_P1.Clear();
Series_P2.Clear();
Series_I.Clear();
ResGrid.Cells[0,0]:='Va';
ResGrid.Cells[1,0]:='I';
ResGrid.Cells[2,0]:='P1';
ResGrid.Cells[3,0]:='P2';
ResGrid.RowCount:=2;
GenX();
PB1.Min :=StrToInt(FloatToStr(Round(V_a)));
PB1.Max := StrToInt(FloatToStr(Round(Vmax)));
while (V_a<=Vmax) do
begin

alfa_1:=alfa_1e*V_a;
alfa_2:=alfa_2e*V_a;
beta:=beta_e*V_a;
Generate();
hi1:=0;
hi2:=0;
cnt:=1;
t:=0;
while (t<tk) do
begin
SetLength(Xx,cnt);
Xx[cnt-1]:=Y[2];
delta1:=Y[1]-Y[3];
P1:=c1*delta1;
delta2:=Y[3]-QQ[Trunc(t/h)+1];
P2:=c2*delta2;
if (delta1<=delta_1p) and (delta1>=delta_1m) then hi1:=hi1+1 ;//else hi1:=0;
if delta2<=delta_2p then hi2:=hi2+1 ;//else hi2:=0;
M_hi1:=hi1/cnt;
M_hi2:=hi2/cnt;
RK(t,h,Y,DY);
for i:=1 to 4 do
Y[i]:=DY[i];
t:=t+h;
inc(cnt);
PB1.Position :=StrToInt(FloatToStr(Round(V_a)));
Application.ProcessMessages;
end;

Mx:=0;
for i:=0 to High(Xx) do
Mx:=Mx+Xx[i];
Mx:=Mx/Length(Xx);

Dx:=0;
for i:=0 to High(Xx) do
Dx:=Dx+sqr(Xx[i]-Mx);
Dx:=Dx/(Length(Xx)-1);
Dx:=sqrt(Dx);
ResGrid.Cells[0,ResGrid.RowCount-1]:=FloatToStr(V_a);
ResGrid.Cells[1,ResGrid.RowCount-1]:=FloatToStr(Dx);
ResGrid.Cells[2,ResGrid.RowCount-1]:=FloatToStr(M_hi1);
ResGrid.Cells[3,ResGrid.RowCount-1]:=FloatToStr(M_hi2);
ResGrid.RowCount:=ResGrid.RowCount+1;
Series_I.AddXY(V_a,Dx);
Series_P1.AddXY(V_a,M_hi1);
Series_P2.AddXY(V_a,M_hi2);
V_a:=V_a+dV;
Xx:=nil;
end;
ResGrid.RowCount:=ResGrid.RowCount-1;
Free_vars();
Free_X();
end;

end.
Соседние файлы в папке Монте_Карло(3)