Расчет динамики разгона судна.




Рис 4. Кусочно-параболическая аппроксимация исходных функций R(V) и T(V).

 

 

y1=1079.9*x+91.384*x*x

y2=25489-1117.3*x+47.638*x*x

y1+y2=1079.9*x+91.384*x*x +25489-1117.3*x+47.638*x*x R(x)

y1=37769-85.542*x-3.6678*x*x

y2=20287+3481.7*x-185.64*x*x

y1+y2=37769-85.542*x-3.6678*x*x +20287+3481.7*x-185.64*x*x T(x)

Итоговая функция F(x)=T(x)-R(x) = 29267+3433.558*x-268.3298*x*x

 

Кусочно-параболическая аппроксимация исходных функций R(V) и T(V):

 

# include <iostream.h>

# include <math.h>

# include <fstream.h>

 

void main ()

{int i,j;

double x[6],y[6],b[3][3],a[3],a1[3],e;

e=0,001;

int k=0;

 

ifstream out;

out.open ("R.txt");

for (i=0;i<=5; i++)

{out>>x[i];}

for (i=0;i<=5;i++)

{out>>y[i];}

out.close ();

 

for (i=0;i<=2;i++)

{for (j=0;j<=2;j++)

{b[i][j]=pow(x[i],j);}}

 

for (i=0;i<=2;i++)

{ a[i]=0;}

 

do

{

if (k!=0)

{for (i=0;i<=2;i++)

{a[i]=a1[i];}}

k++;

 

if (b[0][0]!=0)

{a1[0]=(y[0]-b[0][1]*a[1]-b[0][2]*a[2])/b[0][0];}

 

if (b[1][1]!=0)

{a1[1]=(y[1]-b[1][0]*a1[0]-b[1][2]*a[2])/b[1][1];}

 

if (b[2][2]!=0)

{a1[2]=(y[2]-b[2][0]*a1[0]-b[2][1]*a1[1])/b[2][2];}

 

}

 

while (fabs (a1[0]-a[0])>e || fabs (a1[1]-a[1])>e || fabs (a1[2]-a[2])>e);

 

cout<<"P(x)="<<a1[0]<<"+("<<a1[1]<<")x+("<<a1[2]<<")x^2"<<endl;

 

 

for (i=0;i<=2;i++)

{for (j=0;j<=2;j++)

{b[i][j]=pow(x[i+3],j);}}

 

for (i=0;i<=2;i++)

{ a[i]=0;}

 

do

{

if (k!=0)

{for (i=0;i<=2;i++)

{a[i]=a1[i];}}

k++;

 

if (b[0][0]!=0)

{a1[0]=(y[3]-b[0][1]*a[1]-b[0][2]*a[2])/b[0][0];}

 

if (b[1][1]!=0)

{a1[1]=(y[4]-b[1][0]*a1[0]-b[1][2]*a[2])/b[1][1];}

 

if (b[2][2]!=0)

{a1[2]=(y[5]-b[2][0]*a1[0]-b[2][1]*a1[1])/b[2][2];}

 

}

 

while (fabs (a1[0]-a[0])>e || fabs (a1[1]-a[1])>e || fabs (a1[2]-a[2])>e);

 

cout<<"P(x)="<<a1[0]<<"+("<<a1[1]<<")x+("<<a1[2]<<")x^2"<<endl;}

 

Определение стационарной скорости.

Для нахождения интервала изоляции используем шаговый метод:

#include <iostream.h>

#include <math.h>

double f(double x)

{return(29267+3433.558*x-268.3298*x*x);}

void main ()

{

double a,h;

a=0;

h=1;

while (f(a)*f(a+h)>0)

{a=a+h;}

cout<<"interval ot "<<a<<" do "<<a+h<<endl;}

Интервал от 18 до 19

 

 

Для определения значения стационарной скорости используем метод половинного деления:

#include <iostream.h>

#include <math.h>

double f(double x)

{return(29267+3433.558*x-268.3298*x*x);}

void main ()

{double a,b,e,c;

a=18;

b=19;

e=0.001;

c=(a+b)/2;

while (fabs(f(c))>e)

{

if (f(a)*f(c)<=0)

{b=c;}

else

{a=c;}

c=(a+b)/2;}

cout<<"KOPEHb = "<<c<<endl;}

Стационарная скорость Vст=18.6457 м/с

 

Определение времени разгона осуществляется методом трапеций:

#include <iostream.h>

#include <math.h>

double f(double x)

{return (25300/((29267+3433.558*x-268.3298*x*x)));}

void main ()

{double t,a,h,b;

a=0;

b=18.6457;

t=0;

h=0.00001;

while (a<b)

{t=t+h*((f(a)+f(a+h))/2);

a=a+h;}

cout<<"vremya razgona = "<<t<<endl;}

Время разгона t=48.9436 с

 

 

Путь разгона находим методом Эйлера:

#include <iostream.h>

#include <math.h>

#include <fstream.h>

int x;

double f(double t)

 

{return fabs ((29267+3433.558*x-268.3298*x*x)/25300);}

 

 

void main ()

{ double t,s,x,b,h,k;

{ofstream onstr1;

ofstream onstr2;

ofstream onstr3;

onstr1.open("data4.txt");

onstr2.open("data5.txt");

onstr3.open("data6.txt");

b=48.9436;

h=b/100;

k=0;

x=0;s=0;

t=0;

while (t<=b)

{x=x+h*((29267+3433.558*x-268.3298*x*x)/25300);

s=s+x*h;

t=t+h;

k=k++;

onstr1<<" "<<t<<endl;

onstr2<<" "<<x<<endl;

onstr3<<" "<<s<<endl;}

onstr1.close();

onstr2.close();onstr3.close();}cout<<"k="<<k<<endl;

}

Время Скорость Путь разгона
0.489436 0.978872 1.46831 1.95774 2.44718 2.93662 3.42605 3.91549 4.40492 4.89436 5.3838 5.87323 6.36267 6.8521 7.34154 7.83098 8.32041 8.80985 9.29928 9.78872 10.2782 10.7676 11.257 11.7465 12.2359 12.7253 13.2148 13.7042 14.1936 14.6831 15.1725 15.662 16.1514 16.6408 17.1303 17.6197 18.1091 18.5986 19.088 19.5774 20.0669 20.5563 21.0457 21.5352 22.0246 22.5141 23.0035 23.4929 23.9824 24.4718 24.9612 25.4507 25.9401 26.4295 26.919 27.4084 27.8979 28.3873 28.8767 29.3662 29.8556 30.345 30.8345 31.3239 31.8133 32.3028 32.7922 33.2816 33.7711 34.2605 34.75 35.2394 35.7288 36.2183 36.7077 37.1971 37.6866 38.176 38.6654 39.1549 39.6443 40.1338 40.6232 41.1126 41.6021 42.0915 42.5809 43.0704 43.5598 44.0492 44.5387 45.0281 45.5175 46.007 46.4964 46.9859 47.4753 47.9647 48.4542 48.9436 0.566179 1.1683 1.805 2.47416 3.1729 3.89758 4.64379 5.40648 6.18005 6.95847 7.7355 8.50488 9.26051 9.99664 10.7081 11.3903 12.0396 12.6531 13.2286 13.7651 14.262 14.7197 15.1389 15.521 15.8676 16.1808 16.4627 16.7155 16.9416 17.1432 17.3225 17.4817 17.6227 17.7473 17.8574 17.9544 18.0398 18.1149 18.181 18.2389 18.2898 18.3344 18.3735 18.4077 18.4377 18.4639 18.4868 18.5069 18.5245 18.5398 18.5532 18.5649 18.5752 18.5841 18.5919 18.5987 18.6047 18.6099 18.6144 18.6184 18.6219 18.6249 18.6275 18.6299 18.6319 18.6336 18.6352 18.6365 18.6377 18.6387 18.6396 18.6404 18.641 18.6416 18.6421 18.6426 18.643 18.6433 18.6436 18.6439 18.6441 18.6443 18.6445 18.6447 18.6448 18.6449 18.645 18.6451 18.6452 18.6452 18.6453 18.6453 18.6454 18.6454 18.6455 18.6455 18.6455 18.6456 18.6456 18.6457 0.277108 0.848917 1.73235 2.94329 4.49622 6.40384 8.67667 11.3228 14.3475 17.7533 21.5393 25.7019 30.2343 35.127 40.368 45.9428 51.8354 58.0283 64.5029 71.24 78.2204 85.4247 92.8342 100.431 108.197 116.116 124.174 132.355 140.647 149.037 157.516 166.072 174.697 183.383 192.123 200.911 209.74 218.606 227.504 236.431 245.383 254.356 263.349 272.358 281.382 290.419 299.468 308.525 317.592 326.666 335.747 344.833 353.924 363.02 372.12 381.223 390.328 399.437 408.547 417.66 426.774 435.89 445.007 454.125 463.244 472.364 481.485 490.606 499.728 508.85 517.973 527.097 536.22 545.344 554.468 563.592 572.717 581.842 590.967 600.092 609.217 618.342 627.467 636.593 645.718 654.843 663.969 673.095 682.22 691.346 700.472 709.597 718.723 727.849 736.974 746.1 755.226 764.352 773.478 782.603

 

Рис 5. График зависимости V(t)

Рис 6. График зависимости S(t)

Вывод

Судно выходит на стационарную скорость 18.6457 м/с за 48.9436 секунд, пройдя при этом 782.603 метра.

 

Аппроксимация для метода Эйлера:

# include <iostream.h>

# include <math.h>

# include <fstream.h>

 

void main ()

{int i;

double x[100],y[100],b,a,s1,s2,s3,s4;

 

ifstream out;

out.open ("data.txt");

for (i=0;i<=99; i++)

{out>>x[i];}

for (i=0;i<=99;i++)

{out>>y[i];}

out.close ();

 

s1=s2=s3=s4=0;

 

for(i=0;i<=100;i++)

{s1=s1+x[i];

s2=s2+y[i];

s3=s3+pow(x[i],2);

s4=s4+x[i]*y[i];}

 

cout<<"s1="<<s1<<endl;

cout<<"s2="<<s2<<endl;

cout<<"s3="<<s3<<endl;

cout<<"s4="<<s4<<endl;

b=(s2*s3-s1*s4)/(100*s3-pow(s1,2));

a=(s4-s1*b)/s3;

cout<<endl;

cout<<"V(t):y="<<a<<"x+"<<b<<endl;

cout<<endl;}

V(t)=0.254943 *x+9.6935

 

Кинетическую энергию разгона вычисляем методом правых прямоугольников:

#include <iostream.h>

#include <math.h>

 

 

double f(double x)

 

{return (0.254943 *x+9.6935);}

 

void main ()

 

{

double e,a,b,S,h;

a=0,e=0.001, b=48.9436, h=b/20;

S=f(a+h)*h;

do

{S=S+f(a+2*h)*h;

 

 

a=h+a;

}

while ((a+h)<b);

cout<<"E="<<S*25300<<endl;

}

Кинетическая энергия разгона равна 20115000 Дж.

 

 


 

 

Модельная задача №3



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: