У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Лабораторна робота - Задача стабілізації руху
9

Розрахункова робота

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

Мета роботи: розв’язати задачу стабілізації руху (мінімальними зусиллями добитися зупинки обертання).

Постановка задачі

Задано систему, яка описує обертовий рух тіла:

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.00000000001);

Button2->Visible=true;

CheckBox1->Visible=true;

CheckBox2->Visible=true;

}

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form2->QRDBChart1->Series[0]->Clear();

Form2->QRDBChart1->Series[0]->Title="X1poch";

Form2->QRDBChart1->Series[0]->AddArray(xp[0],100);

Form2->QRDBChart2->Series[0]->Clear();

Form2->QRDBChart2->Series[0]->Title="X2poch";

Form2->QRDBChart2->Series[0]->AddArray(xp[1],100);

Form2->QRDBChart3->Series[0]->Clear();

Form2->QRDBChart3->Series[0]->Title="X3poch";

Form2->QRDBChart3->Series[0]->AddArray(xp[2],100);

Form2->QRDBChart4->Series[0]->Clear();

Form2->QRDBChart4->Series[0]->Title="U1poch";

Form2->QRDBChart4->Series[0]->AddArray(u1p,100);

Form2->QRDBChart5->Series[0]->Clear();

Form2->QRDBChart5->Series[0]->Title="U2poch";

Form2->QRDBChart5->Series[0]->AddArray(u2p,100);

Form2->QRDBChart6->Series[0]->Clear();

Form2->QRDBChart6->Series[0]->Title="U3poch";

Form2->QRDBChart6->Series[0]->AddArray(u3p,100);

Form2->QRDBChart10->Series[0]->Clear();

Form2->QRDBChart10->Series[0]->Title="X1";

Form2->QRDBChart10->Series[0]->AddArray(x[0],100);

Form2->QRDBChart11->Series[0]->Clear();

Form2->QRDBChart11->Series[0]->Title="X2";

Form2->QRDBChart11->Series[0]->AddArray(x[1],100);

Form2->QRDBChart12->Series[0]->Clear();

Form2->QRDBChart12->Series[0]->Title="X3";

Form2->QRDBChart12->Series[0]->AddArray(x[2],100);

Form2->QRDBChart9->Series[0]->Clear();

Form2->QRDBChart9->Series[0]->Title="U1";

Form2->QRDBChart9->Series[0]->AddArray(u1,100);

Form2->QRDBChart8->Series[0]->Clear();

Form2->QRDBChart8->Series[0]->Title="U2";

Form2->QRDBChart8->Series[0]->AddArray(u2,100);

Form2->QRDBChart7->Series[0]->Clear();

Form2->QRDBChart7->Series[0]->Title="U3";

Form2->QRDBChart7->Series[0]->AddArray(u3,100);

Form2->QuickRep1->Preview();

}

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Button2->Visible=false;

CheckBox1->Visible=false;

CheckBox2->Visible=false;

}

void __fastcall TForm1::CheckBox1Click(TObject *Sender)

{

if(CheckBox1->Checked)

{

Form3->Chart1->Series[0]->Clear();

Form3->Chart1->Series[0]->Title="X1poch";

Form3->Chart1->Series[0]->AddArray(xp[0],100);

Form3->Chart1->Series[1]->Clear();

Form3->Chart1->Series[1]->Title="X2poch";

Form3->Chart1->Series[1]->AddArray(xp[1],100);

Form3->Chart1->Series[2]->Clear();

Form3->Chart1->Series[2]->Title="X3poch";

Form3->Chart1->Series[2]->AddArray(xp[2],100);

Form3->Show();

}else {Form3->Close();}

}

void __fastcall TForm1::CheckBox2Click(TObject *Sender)

{

if(CheckBox2->Checked)

{

Form6->Show();

Form6->Chart1->Series[0]->Clear();

Form6->Chart1->Series[0]->Title="U1poch";

Form6->Chart1->Series[0]->AddArray(u1p,100);

Form6->Chart1->Series[1]->Clear();

Form6->Chart1->Series[1]->Title="U2poch";

Form6->Chart1->Series[1]->AddArray(u2p,100);

Form6->Chart1->Series[2]->Clear();

Form6->Chart1->Series[2]->Title="U3poch";

Form6->Chart1->Series[2]->AddArray(u3p,100);

}else {Form6->Close();}}

Рисунок 1 --– Результат роботи програми

Висновок: на даній розрахунковій роботі було розв’язано задачу стабілізації руху. Було розглянуто обертовий рух тіла, досягнуто зупинки обертання мінімальними зусиллями.