考虑空气阻力的模型求解:
主要需求解方程9,10,两个方程均无法解析地求解,转而求数值解代替。
可以运用matlab ode45函数求数值解。
求解方程9:
%求解方程9 燃料还没烧完时
tspan1=[0 60];%求解区间
y01=[0 0];%初值
[t1,x1]=ode45('odefun',tspan1,y01);
xt1=x1(:,1);%燃料没烧完时火箭高度
vt1=x1(:,2);%燃料没烧完时火箭速度
函数odefun.m
function dx=odefun(t,x)
dx=zeros(2,1);%初始化dx
dx(1)=x(2);
dx(2)=(27000-0.3*x(2)^2)/(1600-18*t)-9.8;
求解方程10:
%求解方程10 燃料烧完了
tspan2=[60 76];%求解区间——这里火箭到达最高点的时间(参数2)可以先随意代入,
%而后求出火箭高度x2最大时,t2对应的时间,再反过来代入求解区间
y02=[10546 266];%初值
[t2,x2]=ode45('odefun2',tspan2,y02);
xt2=x2(:,1);%燃料烧完时火箭高度
vt2=x2(:,2);%燃料烧完时火箭速度
函数odefun2.m
function dx=odefun2(t,x)
dx=zeros(2,1);%初始化dx
dx(1)=x(2);
dx(2)=-0.3*dx(1)^2/520-9.8;
将求出的火箭高度x(t),速度v(t)代入方程9、10,可以得到火箭加速度a(t).
最后对考虑空气阻力时火箭上升高度x(t)、速度v(t)和加速度a(t)作图:
主程序的完整代码:
clc,clear
%求解方程9 燃料还没烧完时
tspan1=[0 60];%求解区间
y01=[0 0];%初值
[t1,x1]=ode45('odefun',tspan1,y01);
xt1=x1(:,1);%燃料没烧完时火箭高度
vt1=x1(:,2);%燃料没烧完时火箭速度
%求解方程10 燃料烧完了
tspan2=[60 76];%求解区间——这里火箭到达最高点的时间(参数2)可以先随意代入,
%而后求出火箭高度x2最大时,t2对应的时间,再反过来代入求解区间
y02=[10546 266];%初值
[t2,x2]=ode45('odefun2',tspan2,y02);
xt2=x2(:,1);%燃料烧完时火箭高度
vt2=x2(:,2);%燃料烧完时火箭速度
%作图
figure(1) %火箭高度
plot(t1,xt1,t2,xt2)
xlabel('t');ylabel('x(t)')
figure(2) %火箭速度
plot(t1,vt1,t2,vt2)
xlabel('t');ylabel('v(t)')
figure(3) %火箭加速度
a1=(27000-0.3*vt1.^2)./(1600-0.3*t1)-9.8;%燃料没烧完时火箭加速度
a2=-0.3*vt2.^2/520-9.8;%燃料烧完时火箭加速度
a=[a1',a2'];
t=[t1',t2'];
plot(t,a)
xlabel('t');ylabel('a(t)')