Суть проблемы такая!! Делаю курсовой!! Расчитываю регулятор!! Нужно получить оптимальные настройки!! НЕ пойму выскакивает ошибка"OverFlow"не могу ввести точно и начальные настройки подскажите в чем дело за ранее благодарен!! Код | //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Unit1.h" #include <math.h> #define N 850
//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int ch=0; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) { Series1->Clear(); double q_0=StrToFloat(Edit6->Text), q_1=StrToFloat(Edit7->Text), q_2=StrToFloat(Edit8->Text);
double a_1=StrToFloat(Edit1->Text), a_2=StrToFloat(Edit2->Text), b1=StrToFloat(Edit4->Text), b2=StrToFloat(Edit4->Text), eps=StrToFloat(Edit9->Text); long int n=N,i,j; int mc=4; double e[N],u[N],h0,h1,h2,yq_0[N],yq_1[N],yq_2[N],uq_0[N],uq_1[N], uq_2[N],z=5,yz[N]; double s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,y[N]; double dj; //начальные условия for(i=1;i<=mc;i++) { y[i]=0; yq_0[i]=0; yq_1[i]=0; yq_2[i]=0; e[i]=0;
} for(i=1;i<=mc-1;i++) { yz[i]=0; u[i]=0; uq_0[i]=0; uq_1[i]=0; uq_2[i]=0; } for(i=mc;i<=n;i++) yz[i]=z; h0=0.003; h1=0.003; h2=0.003; j=1; label: s1=s2=s3=0; ch++; for(i=mc;i<n;i++) { e[i]=yz[i]-y[i]; u[i]=u[i-1]+q_0*e[i]+q_1*e[i-1]+q_2*e[i-2]; y[i]=a_1*y[i-1]+a_2*y[i-2]+b1*u[i]+b2*u[i-1];
uq_0[i]=uq_0[i-1]+ e[i] +q_0*(-yq_0[i])+q_1*(-yq_0[i-1])+q_2*(-yq_0[i-2]); uq_1[i]=uq_1[i-1]+e[i-1]+q_0*(-yq_1[i])+q_1*(-yq_1[i-1])+q_2*(-yq_1[i-2]); uq_2[i]=uq_2[i-1]+e[i-2]+q_0*(-yq_2[i])+q_1*(-yq_2[i-1])+q_2*(-yq_2[i-2]);
yq_0[i+1]=a_1*yq_0[i-1]+a_2*yq_0[i-2]+b1*uq_0[i]+b2*uq_0[i-1]; yq_1[i+1]=a_1*yq_1[i-1]+a_2*yq_1[i-2]+b1*uq_1[i]+b2*uq_1[i-1]; yq_2[i+1]=a_1*yq_2[i-1]+a_2*yq_2[i-2]+b1*uq_2[i]+b2*uq_2[i-1];
s1+=(yz[i]-y[i])*(-yq_0[i]); s2+=(yz[i]-y[i])*(-yq_1[i]); s3+=(yz[i]-y[i])*(-yq_2[i]); } dj=sqrt(pow(s1,2)+pow(s2,2)+pow(s3,2)); Memo1->Lines->Add(dj); if(dj>eps) { if(j != 1) { if((s1*s4) > 0)h0=h0*1.9; else h0=h0/3.; if((s2*s5) > 0)h1=h1*1.9; else h1=h1/3.; if((s3*s6) > 0)h2=h2*1.9; else h2=h2/3.; } else { h0=0.0003; h1=0.0003; h2=0.0003; } q_0=q_0-h0*s1/dj; q_1=q_1-h1*s2/dj; q_2=q_2-h2*s3/dj; j++; s4=s1; s5=s2; s6=s3; goto label; } double q0=floor(q_0*1000000); double q1=floor(q_1*1000000); double q2=floor(q_2*1000000); Edit10->Text=FloatToStr(q0/1000000); Edit11->Text=FloatToStr(q1/1000000); Edit12->Text=FloatToStr(q2/1000000); Edit13->Text=FloatToStr(dj); Label3->Caption="Оптимум достигнут!"; Edit14->Text=IntToStr(ch); for(i=mc;i<floor(n/2);i++) { e[i]=yz[i]-y[i]; u[i]=u[i-1]+q_0*e[i]+q_1*e[i-1]+q_2*e[i-2]; y[i]=a_1*y[i-1]+a_2*y[i-2]+b1*u[i]+b2*u[i-1];;
} for(i=1;i<floor(n/2);i++) { Series1->AddXY(i,y[i],"",clBlack); }
} //---------------------------------------------------------------------------
|
Присоединённый файл ( Кол-во скачиваний: 1 )
PID.rar 413,60 Kb
|