Вычисление кинетической энергии
Для расчета кинетической энергии затрачиваемой на разгон судна используется известное соотношение
Такой же расчет необходимо произвести для задачи торможения. Вычисление интеграла производится одним из численных методов на основании результатов, полученных в третьей модельной задаче.
Первая модельная задача
// дима.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
double m=12000;
double R(double v){
return 548.8*v;
}
double T(double v){
return -289*v+15680;
}
double fv(double v){
return 1.0/m*(T(v)-R(v));
}
double fs(double v){
return v;
}
void main(){
cout<<"Raschet puti razgona metodom Eilera"<<endl;
double eps=0.001, a=0, b=141, h,s1,v1,t1;
int i, n=200;
h=(b-a)/(double)n;
double t=0, v=0, s=0, w=10;
for(i=0; i<n; i++){
s1=s+h*fs(v+h/2*fv(v));
v1=v+h*fv(v+h/2*fv(v));
t1=t+h;
s=s1;
v=v1;
t=t1;
if(fabs(v-w)<eps){
cout<<"t razg="<<t<<endl;
cout<<"v razg="<<v<<endl;
cout<<"s razg="<<s<<endl;
break;
}
w=v;
}
//getch();
}
Вторая модельная задача
// дима.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
double m=12000;
double R(double v){
if(v<11.11111) return 1429.7*v-155.48;
else if(v<16.66667) return -693*v+20193;
else return 590.94*v-1009.4;
}
double T(double v){
if(v<7.22222)
return -122.57*v+15797;
else return -677.37*v+19507;}
double fv(double v){
return 1.0/m*(T(v)-R(v));
}
double fs(double v){
return v;
}
void main(){
cout<<"Raschet puti razgona metodom Eilera"<<endl;
double eps=0.001, a=0, b=141, h,s1,v1,t1;
int i, n=200;
h=(b-a)/(double)n;
double t=0, v=0, s=0, w=10;
for(i=0; i<n; i++){
s1=s+h*fs(v+h/2*fv(v));
v1=v+h*fv(v+h/2*fv(v));
t1=t+h;
s=s1;
v=v1;
t=t1;
if(fabs(v-w)<eps){
cout<<"t razg="<<t<<endl;
cout<<"v razg="<<v<<endl;
cout<<"s razg="<<s<<endl;
break;
}
w=v;
}
//getch();
}
Третья модельная задача
// дима.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
double m=12000;
double R(double v){
if(v<5) return 58.969*pow(v,3)-20.165*pow(v,2)+194.61*v;
else if(v<9.44444) return 119.07*pow(v,3)-3109.1*pow(v,2)+27011*v-64374;
else if(v<14.44444) return -5.4432*pow(v,4)+278.21*pow(v,3)-5315.5*pow(v,2)+44112*v-119825;
else return -0.6612*pow(v,3)+197.18*pow(v,2)-5987.4*v+57159;
}
double T(double v){
if(v<5.55556)
return -13.605*pow(v,2)-11.359*v+15683;
else return -56.662*pow(v,2)+306.35*v+15329;}
double fv(double v){
return 1.0/m*(T(v)-R(v));
}
double fs(double v){
return v;
}
void main(){
cout<<"Raschet puti razgona metodom Eilera"<<endl;
double eps=0.001, a=0, b=141, h,s1,v1,t1;
int i, n=200;
h=(b-a)/(double)n;
double t=0, v=0, s=0, w=10;
for(i=0; i<n; i++){
s1=s+h*fs(v+h/2*fv(v));
v1=v+h*fv(v+h/2*fv(v));
t1=t+h;
s=s1;
v=v1;
t=t1;
if(fabs(v-w)<eps){
cout<<"t razg="<<t<<endl;
cout<<"v razg="<<v<<endl;
cout<<"s razg="<<s<<endl;
break;
}
w=v;
}
//getch();
}