Синтез автоматических систем в условиях неполной информации о переменных параметрах объекта (1086432), страница 7
Текст из файла (страница 7)
73
Inc(Index);
end;
procedure TfExtreme.Calcualte; var
dQ,Ro 1 :Extended;
F irstMaxQF ound:Boolean; begin SetAl;
T:=0;
X:=X0;
Y:=C2*X*X+C1;
Z:=Y;
dZ:=0;
Q:=Z;
F irstMaxQF ound: =F alse;
MaxQ:=Q;
MinQ:=Q;
Rol:=0;
V :=V 1;
Index:=l;
Zmax:=0; while T<TMax do begin dQ:=(Z-bO * Q)/b 1;
Q:=Q+dQ*dT;
Ro:=Q-MaxQ;
if (Rol>-A0) and (Ro<-A0) then begin V:=-V;
end;
Rol:=Ro;
AddPoints;
if chbDrift.Checked then case edExtractable.Itemlndex of 0: Y:=C2*Math.Power(X-Alfal*Sin(Omega*T),2)+C 1; 1: Y:=C2*Math.Power(X-Alfal *Sin(Omega*T),2)+C 1; end
else
Y:=C2*X*X+C1;
NextZ;
T:=T+dT;
X:=X+V*dT; if MaxQ<Q then MaxQ:=Q
else if not FirstMaxQFound and (MaxQ>Q) then begin
FirstMaxQFound:=True;
MinQ:=Q;
end;
if FirstMaxQFound then if MinQ>Q then MinQ:=Q; end; end;
procedure TfExtreme.NextZ; var
ddZ:Extended;
begin
dZl:=0;
dZ2:=0;
case edExtractable.Itemlndex of 0:
case Power of 1:
begin
dZ:=(Y-Z)/Taul;
end;
2:
begin
dZ:=Zl;
dZl:=(Y-2*Ksi*Tau*Zl-Z)/(Tau*Tau);
end;
3:
begin
dZ:=Zl;
dZl:=Z2;
dZ2:=(Y-(Tau*Tau+Taul*2*Ksi*Taii)*Z2-(Taiil+2*Ksi*Tau)*Zl- Z)/(Tau 1 * Tau* T au); end; end;
1:
case Power of 1:
begin
dZ:=Sin(Y-Z)-Z/Taul; end;
2:
begin
dZ:=Zl;
dZl:=(Sin(Y-Z)-2*Ksi*Tau*Zl-Z)/(Tau*Tau);
end;
3:
begin
dZ:=Zl;
dZl:=Z2;
dZ2:=(Sin(Y-Z)-(Tau*Tau+Taul*2*Ksi*Tau)*Z2-(Taul+2*Ksi*Tau)*Zl- Z)/(T au 1 * T au* T au); end; end; end;
Z:=Z+dZ*dT;
Zl:=Zl+dZl*dT;
Z2: =Z2+dZ2 * dT; end;
procedure Tffixtreme.SetA 1; var
Xstrokem,Xstroke2m,DeltaGz,DeltaGy ,DeltaOmegaG, AO 1, A02 ,k,h,T auO, BiExtended;
function Mu:Extended; begin
Result:=Sqrt( 1 -Ksi*Ksi)/Ksi; end;
function DeltaGy 1 :Extended; var
AlfaiExtended;
begin
Alfa:=l/Taul;
Result:=l/Alfa;
end;
function DeltaGy2:Extended; var
Alfa:Extended; begin Alfa:=Ksi/Tau; if Ksi=l then Result:=l/Alfa else
Result :=2/Alfa*(
1 /(Mu*Mu+1 )+Exp(ArcTan(Mu)/Mu)/(Sqrt(Mu*Mu+1 )* (Exp (Pi/Mu)-1))); end;
function DeltaOmegaGl :Extended; begin Result:=l; end;
function DeltaOmegaG2:Extended; begin ifKsi=l then Result:=l else
Result:=(Exp(Pi/Mu)+l )/(Exp(Pi/Mu)-1); end;
begin
DeltaGz:=0;
DeltaGy:=0;
DeltaOmegaG:=();
Setsigmal;
if chbDrifi. Checked then begin
Xstrokem:=Alfal * Omega;
Xstroke2m:=Alfal * Omega* Omega; case Power of 1:
begin
DeltaGz:=0.001;
DeltaGy:=DeltaGy 1; DeltaOmegaG:=DeltaOmegaG 1; end;
2:
begin
DeltaGz:=0.001;
DeltaGy: =DeltaGy2; DeltaOmegaG:=DeltaOmegaG2 end;
3:
begin
DeltaGz:=0.001;
DeltaGy:=DeltaGy 1 +DeltaOmegaG 1 * DeltaGy 2; DeltaOmegaG:=DeltaOmegaGl*DeltaOmegaG2; end;
end;
АО 1 :=DeltaGy*(gt+gy*(Xl +Xstrokem));
A02 :=DeltaGz*DeltaOmegaG* (gt+gy *(X 1 +Xstrokem)); A0:=2*(A01+A02);
k:=-(Math.Power(Xl-Xstrokem,2)*gyyplus+gtt+2*gty*(Xl+Xstrokem)
+gy*Xstroke2m);
h:=gt*gt/(2*k);
TauO :=Sqrt(2 * (AO * (Ysmall+1 )+h)/k);
В :=gt/((X 1 -Xstrokem) * Abs(gyyplus))+(X 1 +Xstrokem)* T auO; DeltaY:=A01+0.5*B*B*Abs(gyyminus); end else
AO :=2 * (V1 * fl * sigma 1+V1 * f 1 * sigma2 * sigma 1 wave);
A1 :=2*A0+fl *V 1 * sigma 1; end;
procedure TfExtreme.Setsigmal; function sigmal lwave:Extended; begin Result:=-Tau; end;
function sigmal2wave:Extended; var
Alfal ,Alfa2,Dlcorr:Extended; begin
D1 corr:=Sqrt(Ksi*Ksi-1);
Alfal :=(-Ksi-Dlcorr)/Tau;
Alfa2 :=(-Ksi+D 1 corr)/T au;
Result:=l/Alfal+1/Alfa2;
end;
function sigmal l:Extended; begin Result:=Taul; end;
function sigmal2:Extended; var
Mu,Alfa:Extended; begin if Ksi=l then Result:=sigmal 1 else begin
Mu:=Sqrt( 1 -Ksi*Ksi)/Ksi;
Alfa:=Ksi/Tau;
Result:=2/Alfa *
( l/(Mu*Mu+l) + Exp(ArcTan(Mu)/Mu)/(Sqrt(Mu*Mu+l)*(Exp(Pi/Mu)-l))); end; end;
begin case Power of 1:
begin sigmal :=sigmall; end;
2:
begin sigmal :=sigmal2; end;
3:
begin
sigma l:=sigmal l+sigmal2; end; end;
sigmalwavei^bl/bO;
end;
procedure TfExtreme.btnCalculateClick(Sender: TObject); begin
Screen.Cursor:=crHourGlass;
chQ.UndoZoom;
chV.UndoZoom;
chP.UndoZoom;
try
Clear;
Power:=StrToInt(edPower.Text);
Taul :=StrToFloat(edTaul .Text);
Tau:=StrToFloat(edTau.Text);
Ksi:=StrToFloat(edKsi.Text);
Calcualte;
edMaxQ.Text:=FloatToStr(MaxQ); edMinQ.Text:=FloatToStr(MinQ); edDeltar.Text :=FloatToStr((MaxQ-MinQ) { * 100/2}); if chbDrift. Checked then edDeltaguar.Text:=FloatToStr(DeltaY {*100/2}) else
edDeltaguar.Text:=FloatToStr(Al {*100/2}); finally
chQ.ZoomPercent(90);
chV.ZoomPercent(90);
chP.ZoomPercent(97);
Screen.Cursor:=crDefault;
end;
end;
procedure TfExtreme.Clear; begin chQ.Series[0].Clear; chV. Series [0]. Clear; chP. Series [0]. Clear; chP.Series[l].Clear; end;
end.