Скачиваний:
21
Добавлен:
02.05.2014
Размер:
8 Кб
Скачать
☆
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)