二阶微分方程的matlab解法,以动力学方程为例

8d125114edbf8270edca79b2fa2df574.png

过冷水最近有接触一点点动力学的知识。作为动力学入门,当然的会解动力学方程了。于是本期过冷就教大家解动力学微分方程。

df509b2f9bf34bae1cf4b0b33c2a1626.png

上图是两个小车通过弹簧链接起来的做来回摆动运动。应用拉克朗日方程建立系统的运动微分方程:

fa98fa2a2457f378ef333be447fc6a83.png

需要二阶微分方程组转化为一阶微分方程组:

4817c368414ad94f75bd553c6944175d.png

    根据得到的一阶微分方程组进行差微分求解就可以解得x1、x2随时间的变换。

采用差分法就可以得到小车的运动轨迹

82e22e1769fa4ce09f6e63d5085731a7.png

具体代码是:

x_chuzh1=[0;0.2;0;0];
c1=0.1;
c2=0.4;
k1=2;
k2=3;
m1=4;
m2=6;
[t,x]=ode45('dyna',[0,50],x_chuzh1,[],m1,m2,c1,c2,k1,k2);
plot(t,x(:,4),'--b');
hold on
set(gca,'FontSize',10,'Fontname','Times New Roman');
function xp=dyna(t,x,flg,m1,m2,c1,c2,k1,k2)
xp=zeros(4,1);
xp(1)=x(2);
xp(2)=-(c1/m1)*(x(2)-x(4))-(k1/m1)*(x(1)-x(3));
xp(3)=x(4);
xp(4)=-(c1/m2)*(x(4)-x(2))-(k1/m2)*(x(3)-x(1))-(c2/m2)*x(4)-(k2/m2)*(x(3)-x(1))-(k2/m2)*x(3);
End

根据得到的,其实动力学方程本质上就是解微分方程的问题,不是很复杂,本期需要注意的是ode45函数可以直接识别自定义的方程组。根据该思路过冷水就可以尝试封闭小盒中的粒子自由运动了。

往期回顾>>>>>>

数值优化方法—迭代法&终止条件

数值优化方法及MATLAB实现(一)

十万个matlab编程问题征集,欢迎来问

数值优化—复杂函数重积分计算方法实例演示

MATLAB编程爱好者Q群正式升级为2000人群,欢迎加入!

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值