请问这种分段的微分方程如何用数值求解,我试了一下if语句,函数图像后半段是直线了,感觉不对,或者不用数值求解,怎么解决第二问啊
2条回答 默认 最新
- 颖淑 2022-06-14 22:27关注
这里为你解惑一下,你的思路可能和我的一样,后半段画出来是条直线的原因:伞兵跳伞,打开降落伞前,他下落的速度越来越快,他受到的重力大于阻力;打开降落伞后一段时间,他匀速下落,此时他受到的阻力与重力平衡,大小相等。现实生活中是这样,有一段时间在加速度在减小,直到匀速下落。但是在这个题目当中,这道题目忽略了这个过程在微分法中,4.99999s-5.00000s时加速度就产生了突变(因为k2是k1的4倍),导致加速度直接突变成0。才会导致后面的匀速下落(即运动图像是一条直线的情况)。
我把道题的解答放在下面:
第一题
第二题
代码:
%第一题:
clc,clear all
t=0:0.5:20;
h=600-0.59.81(t.^2);
plot(t,h,'r')
hold on
plot([5 5], ylim )
hold on
plot(xlim, [0 0])
title('自由落体')
ylim([-100,600])
xlabel('t/s')
ylabel('h/m')
h=@(t)600-0.59.81(t.^2);
h(5)
hold on
plot(5,h(5),'ro-')
legend('h=600-0.59.81(t.^2)')
syms t;
h=600-0.59.81(t.^2);
t=finverse(h)
t=@(h)(102^(1/2)109^(1/2)(600 - h)^(1/2))/327;
t(0)
hold on
plot(t(0),0,'')
v=-9.81*(t(0))
%第二题
clear ;clc;
y0=600;g=9.81;v(1)=0;K1=1/15;K2=4/15;%初始条件
apha=0.00001;n=0;y(1)=600;t(1)=0;%切片,类似梯度下降法,apha为步长,apha越小越精确
while y(n+1)>0
n=n+1;
t(n+1)=napha;
a(n)=0.0125K1*v(n)v(n)(t(n+1)<5) + 0.0125*K2*v(n)*v(n)*(t(n+1)>=5);
v(n+1)=v(n)+(g-a(n))apha;
y(n+1)=y(n)-v(n)apha-0.5(g-a(n))apha^2;
if y(n+1)<=0.05 && y(n+1)>=0
H=n+1;
end
end
y1=y(500000)
v1=v(H)
t0=Hapha
plot(t,y,'r');
title('带有空气阻力运动');
xlabel('t/s');
ylabel('h/m');
hold on
plot([5 5], ylim )
hold on
plot(xlim, [0 0])
hold on
plot(5,y1,'ro-')%o表示开伞点
hold on
plot(t0,0,'')%*表示落地点本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报