Головна Головна -> Інше українською -> Інформатика, комп'ютери, програмування -> Задача стабілізації руху

Задача стабілізації руху

Назва:
Задача стабілізації руху
Тип:
Інше
Мова:
Українська
Розмiр:
2,12 KB
Завантажень:
295
Оцінка:
 
поточна оцінка 5.0


Скачати цю роботу безкоштовно
Пролистати роботу: 1  2 
Розрахункова робота
Задача стабілізації руху




Мета роботи: розв’язати задачу стабілізації руху (мінімальними зусиллями добитися зупинки обертання).
Постановка задачі
Задано систему, яка описує обертовий рух тіла:
x1(0)=24,
x2(0)=16, x3(0)=16,
x1(T)=x2(T)= x3(T)=0;
T=1, 0 ? t ?1
Початкове наближення:
Функціонал задачі замінимо інтегральною сумою.
Почергово змінюються коефіцієнти Xn,i=Xn,i+/-Hi, що призводить до зміни значень u, через що понижується значення вказаної інтегральної суми.


#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit6.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
double x[3][101];
double u1[101], u2[101], u3[101];
double xp[3][101];
double u1p[101], u2p[101], u3p[101];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i=0,j=0;
double tau=0.01,T=1;
double F=0,F1=0,F1_1=0,F1_2=0,F1_3=0;
int k1=0,kil=0,kil1=0;
double dxk[3]={0,0,0};
//dxk[0]=Edit7->Text.ToDouble();
//dxk[1]=Edit7->Text.ToDouble();
//dxk[2]=Edit7->Text.ToDouble();
x[0][0]=24; x[1][0]=16; x[2][0]=16;
u1p[0]=24; u2p[0]=16;u3p[0]=16;
for (i=0;i<101;i++)
{
u1[i]=x[0][0]*(1-i/(100*T)); x[0][i]=u1[i]; xp[0][i]=u1[i];
u2[i]=x[1][0]*(1-i/(100*T)); x[1][i]=u2[i]; xp[1][i]=u2[i];
u3[i]=x[2][0]*(1-i/(100*T)); x[2][i]=u3[i]; xp[2][i]=u3[i];
}
for (i=0;i<100;i++)
{ u1[i+1]=(x[0][i+1]-x[0][i])*6/tau;
u2[i+1]= (x[1][i+1]-x[1][i])/tau + 0.2*\
(x[1][i+1]+x[1][i])*(x[2][i+1]+x[2][i])/4;
u3[i+1]=((x[2][i+1]-x[2][i])/tau - 0.2* \
(x[0][i+1]+x[0][i])*(x[1][i+1]+x[1][i])/4)*5;
u1p[i]=u1[i]; u2p[i]=u2[i]; u3p[i]=u3[i];
}
F=0;
for(i=0;i<100;i++)
{F+= fabs((u1[i]+u1[i+1])/2)+\
fabs((u2[i]+u2[i+1])/2)+\
fabs((u3[i]+u3[i+1])/2); }
Edit1->Text=F*tau;
ListBox1->Items->Add(F*tau);
Series1->Title="U1";
Series2->Title="U2";
Series3->Title="U3";
Series1->AddArray(u1,100);
Series2->AddArray(u2,100);
Series3->AddArray(u3,100);
Series4->Title="X1";
Series5->Title="X2";
Series6->Title="X3";
Series4->AddArray(x[0],100);
Series5->AddArray(x[1],100);
Series6->AddArray(x[2],100);
Form1->Update();
Form4->Show();
Form4->Series1->Title="U1";
Form4->Series2->Title="U2";
Form4->Series3->Title="U3";
Form5->Show();
Form5->Series1->Title="X1";
Form5->Series2->Title="X2";
Form5->Series3->Title="X3";
double eps=100;
x[0][100]=0;x[1][100]=0;x[2][100]=0;
do
{
dxk[0]=0.8; dxk[1]=0.8; dxk[2]=0.8;
F1=F;
for(k1=1;k1<100;k1++){
for(j=0;j<3;j++)
{ F=0;
for (i=1;i<99;i++)
{ u1[i+1]=(x[0][i+1]-x[0][i])*6/tau;
u2[i+1]= (x[1][i+1]-x[1][i])/tau + 0.2*\
(x[1][i+1]+x[1][i])*(x[2][i+1]+x[2][i])/4;
u3[i+1]=((x[2][i+1]-x[2][i])/tau - 0.2* \
(x[0][i+1]+x[0][i])*(x[1][i+1]+x[1][i])/4)/0.2;
}
for(i=1;i<99;i++)
{F+= fabs((u1[i]+u1[i+1])/2)+\
fabs((u2[i]+u2[i+1])/2)+\
fabs((u3[i]+u3[i+1])/2);}
F1_1=F; F=0;
x[j][k1]+=dxk[j];
for (i=1;i<99;i++)
{ u1[i+1]=(x[0][i+1]-x[0][i])*6/tau;
u2[i+1]= (x[1][i+1]-x[1][i])/tau + 0.2*\
(x[1][i+1]+x[1][i])*(x[2][i+1]+x[2][i])/4;
u3[i+1]=((x[2][i+1]-x[2][i])/tau - 0.2* \
(x[0][i+1]+x[0][i])*(x[1][i+1]+x[1][i])/4)/0.2;
}
for(i=1;i<99;i++)
{F+= fabs((u1[i]+u1[i+1])/2)+\
fabs((u2[i]+u2[i+1])/2)+\
fabs((u3[i]+u3[i+1])/2);}
F1_2=F; F=0;
x[j][k1]-=2*dxk[j];
for (i=1;i<99;i++)
{ u1[i+1]=(x[0][i+1]-x[0][i])*6/tau;
u2[i+1]= (x[1][i+1]-x[1][i])/tau + 0.2*\
(x[1][i+1]+x[1][i])*(x[2][i+1]+x[2][i])/4;
u3[i+1]=((x[2][i+1]-x[2][i])/tau - 0.2* \
(x[0][i+1]+x[0][i])*(x[1][i+1]+x[1][i])/4)/0.2;
}
for(i=1;i<99;i++)
{F+= fabs((u1[i]+u1[i+1])/2)+\
fabs((u2[i]+u2[i+1])/2)+\
fabs((u3[i]+u3[i+1])/2);}
F1_3=F; F=0;
if(F1_1<F1_2){ if(F1_1<F1_3){x[j][k1]+=dxk[j]; F=F1_1; }
else {x[j][k1]=x[j][k1]; F=F1_3;} }
else { if(F1_2<F1_3){x[j][k1]+=2*dxk[j]; F=F1_2;}
else {x[j][k1]=x[j][k1]; F=F1_3;} }
kil1++;
Edit6->Text=kil1;
if(F1*F1*F1*F1-F*F*F*F<0){dxk[j]=dxk[j]/2;}
}}
ListBox1->Items->Add(F*tau);
Edit2->Text=F1_1;
Edit3->Text=F1_2;
Edit4->Text=F1_3;
Edit5->Text=kil;
Series1->Clear();
Series2->Clear();
Series3->Clear();
Series4->Clear();
Series5->Clear();
Series6->Clear();
Series1->AddArray(u1,100);
Series2->AddArray(u2,100);
Series3->AddArray(u3,100);
Series4->AddArray(x[0],100);
Series5->AddArray(x[1],100);
Series6->AddArray(x[2],100);
Form1->Update();
Form4->Series1->Clear();
Form4->Series2->Clear();
Form4->Series3->Clear();
Form4->Series1->AddArray(u1,100);
Form4->Series2->AddArray(u2,100);
Form4->Series3->AddArray(u3,100);
Form4->Update();
Form5->Series1->Clear();
Form5->Series2->Clear();
Form5->Series3->Clear();
Form5->Series1->AddArray(x[0],100);
Form5->Series2->AddArray(x[1],100);
Form5->Series3->AddArray(x[2],100);
Form5->Update();
kil++;
eps= fabs( pow((F1_1+F1_2+F1_3)/3,5)-pow(F,5) );
}while ( eps>0.

Завантажити цю роботу безкоштовно
Пролистати роботу: 1  2 



Інше на тему: Задача стабілізації руху

BR.com.ua © 1999-2017 | Реклама на сайті | Умови використання | Зворотній зв'язок