微分方程组如何用matlab解角度为3度,g为重力加速度,取9.8,如何得到v和t的曲线

丫头爱宁 1年前 已收到1个回答 举报

kuaidapeng 春芽

共回答了15个问题采纳率:100% 举报

clc
f=inline('[y(2);-1.204*(y(2)^2+y(4)^2)*cos(pi/60);y(4);-1.204*(y(2)^2+y(4)^2)*sin(pi/60)-9.8]','t','y');
[t y]=ode45(f,[0 1],[初值]);
v=sqrt(y(:,2).^2+y(:,4).^2);
plot(t,v)
带入初值,运行即可,还有角度真的是3度?

1年前 追问

8

丫头爱宁 举报

恩恩,是的,果然是高手啊,用的是ode45变步长算法对吧,不太理解这个东西,能给我稍微解释一下么

举报 kuaidapeng

f是定义方程组 ode45是求解 plot是画图

丫头爱宁 举报

报错了,我改了之后还是报错, clc fun=inline('[y(2);-1.204*(y(2)^2+y(4)^2)*cos(pi/60);y(4);-1.204*(y(2)^2+y(4)^2)*sin(pi/60)-9.8]','t','y'); [t,y]=ode45(fun,[0,1],988); v=sqrt(y(:,2).^2+y(:,4).^2); plot(t,v)

举报 kuaidapeng

初值是4个初值,x,y,vx,vy

丫头爱宁 举报

哦哦,谢谢,可是出图时提示警告,出来的图也不对 clc f=inline('[y(2);-1.204*(y(2)^2+y(4)^2)*cos(pi/60);y(4);-1.204*(y(2)^2+y(4)^2)*sin(pi/60)-9.8]','t','y'); [t,y]=ode23(f,[0,1],[0.0,1.5,986.6,51.7]); v=sqrt(y(:,2).^2+y(:,4).^2); plot(t,v)

举报 kuaidapeng

不好意思,初值的顺序搞错了

应该按照x,vx,y,vy的顺序输入

clc

f=inline('[y(2);-1.204*(y(2)^2+y(4)^2)*cos(pi/60);y(4);-1.204*(y(2)^2+y(4)^2)*sin(pi/60)-9.8]','t','y');

[t y]=ode45(f,[0 0.681],[0 986.6 1.5 51.7])

v=sqrt(y(:,2).^2+y(:,4).^2);

plot(t,v)

xlabel('时间t'),ylabel('和速度v')

图像有两条渐近线,t=0和t=0.681

丫头爱宁 举报

这么奇怪的结果,我这个是一个子弹的速度和时间的方程,不符合实际啊

举报 kuaidapeng

想来想去只可能是方程的问题 1.子弹的初始速度与水平面成3度夹角,且顺时针,那么ax就不该那么写 2.子弹受到的y方向的阻力是与重力方向相反的,第三个方程右边不应该都是负号 其他好像没什么问题了
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.020 s. - webmaster@yulucn.com