Лабораторна робота
Задача про вертикальний підйом ракети
Мета роботи: Метою роботи є знаходження максимальної висоти підйому ракети за час Т=100.
система диференційних рівнянь, яка описує фізику польоту ракети, де
Х1–загальна маса ракети: маса рами ракети і залитого пального, припускаємо,
U–управління (розхід пального), повинно задовольняти умовам: 0<U<0,04,
Х2–максимальна висота польоту ракети,
Х3–вертикальна швидкість,
V=const,
g–гравітаційна стала,
Q(x)–оптікаємість.
Початкові умови: X1,2,3(0)={1,0,0}, тобто Х1=1, Х2=0, Х3=0.
Хід роботи
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<stdio.h>
#include<fstream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int flag=0;
double U[100],X1[100],X2[100],X3[100],dt=1,V=0.0168;
double H=pow(-10,11),Hw,delta=0.01,g=0.981*pow(10,-4),Q=0;
X1[0]=1,X2[0]=0,X3[0]=0;
float b=0,t1=10,t2=80,f0=0.2,a,c,d,Uc=0.04;
//================================================================
do
{b=b+0.065;
a=Uc/(exp(-b*t1)-exp(-b*t2));
c=-a*exp(-b*t2);
d=-a*exp(-b*t2)/b+a*exp(-b*t1)/b+c*(t2-t1)-1+f0+Uc*t1;}
while(fabs(d)<0.01);
for(int t=1;t<99;t++)
{if(t<t1) U[t]=Uc;
else {if(t<t2) {U[t]=a*exp(-b*(t))+c;}
else U[t]=0;}
Series1->Add(U[t]);}
//================================================================
do
{ Hw=H;
for(int i=0;i<99;i++)
{X1[i+1]=-U[i]*dt+X1[i];
X2[i+1]=X3[i]*dt+X2[i];
Q=0.96*X3[i]*X3[i]*exp(-14.7*X2[i]);
X3[i+1]=-g*dt+(V*U[i]-Q)/X1[i]*dt+X3[i];}
H=X2[99];
for(int j=0;j<99;j++)
{
if(U[j]>delta)
{ U[j]-=delta;
for(int i=0;i<99;i++)
{ if(U[i]+delta<0.04)
{ U[i]+=delta;
for(int k=0;k<99;k++)
{X1[k+1]=-U[k]*dt+X1[k];
X2[k+1]=X3[k]*dt+X2[k];
Q=0.96*X3[k]*X3[k]*exp(-14.7*X2[k]);
X3[k+1]=-g*dt+(V*U[k]-Q)/X1[k]*dt+X3[k];
}
if(H>=X2[99])
U[i]-=delta;
else
{H=X2[99]; flag++; break;}
}
}
if(flag==0)
U[j]+=delta;
else
{flag--;j=-1;}
Label2->Caption=FloatToStr(X2[99]);
}
}
delta/=2;
}
while((fabs(H-Hw)>pow(10,-3))||(delta>pow(10,-3)));
//=================================================================
for(int i=0;i<99;i++)
{Series2->Add(U[i]);
Series3->Add(X1[i]);
Series4->Add(X2[i]);
Series5->Add(X3[i]);}
}
//---------------------------------------------------------------------------
Результати виконання роботи.
Висновок: на даній лабораторній роботі було знайдено максимальну висоту підйому ракети за час Т=100. Вона становить 3,5 од.