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





Лабораторна робота

Задача про вертикальний підйом ракети

Мета роботи: Метою роботи є знаходження максимальної висоти підйому ракети за час Т=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 од.