我是靠谱客的博主 香蕉小蚂蚁,最近开发中收集的这篇文章主要介绍simulink的fcn怎么用_双摆系统的Simulink仿真(Fcn Block),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

根据双摆系统的拉格朗日动力模型建立仿真。

计算拉格朗日方程:

当计算出拉格朗日量之后,需要求出L对phi1,phi2,dphi1,dphi2的偏导。

Matlab中,当所有参数为sym变量时,我们可以用jacobian这一命令实现:

L_phi1 = jacobian(L,phi1);

L_dphi1 = jacobian(L,dphi1);

L_phi2 = jacobian(L,phi2);

L_dphi2 = jacobian(L,dphi2);

2.求出偏导后,需要计算dL_ddphi1和dL_ddphi2对时间的导数,但是此时角度为sym变量,因此需将两式中的角度,角速度变量替换为与时间有关的变量:

可以使用subs来实现这一操作:

L_dphi1_t = subs(L_dphi1,{phi1,dphi1,phi2,dphi2}, ...

str2sym({'phi1(t)','dphi1(t)','phi2(t)','dphi2(t)'}));

L_dphi2_t = subs(L_dphi2,{phi1,dphi1,phi2,dphi2}, ...

str2sym({'phi1(t)','dphi1(t)','phi2(t)','dphi2(t)'}));

然后使用diff函数对时间求导:

dL_dphi1_t = diff(L_dphi1_t,t);

dL_dphi2_t = diff(L_dphi2_t,t);

最后利用subs函数再将dL_dphi1_t中的phi1(t)等变量替换回phi1。

Var_t = str2sym({'phi1(t)','dphi1(t)','diff(phi1(t),t)','diff(dphi1(t),t)',...

'phi2(t)','dphi2(t)','diff(phi2(t),t)','diff(dphi2(t),t)'});

Var_ot = {phi1,dphi1,dphi1,ddphi1,phi2,dphi2,dphi2,ddphi2};

dL_dphi1_t = subs(dL_dphi1_t,Var_t,Var_ot);

dL_dphi2_t = subs(dL_dphi2_t,Var_t,Var_ot);

3.利用solve函数求出ddphi1和ddphi2与其他变量的关系。

Sol = solve([dL_dphi1_t - L_phi1 == Qphi1, dL_dphi2_t - L_phi2 == Qphi2], [ddphi1, ddphi2])

求出ddphi的等式后会发现非常的长,因此可以用simplify先化简一下,然而化简之后的等式仍然很长!至于有多长,大概这么长。。

Simulink仿真

Matlab中可以使用Fcn Blocks,MATLAB-Function-Block,S-Function等对系统进行自定义模型建立。在此简单介绍一下Fcb Blocks的创建方法。

Fcn Blocks建立方法非常简单,只需要在Simulink库中找到FcnBlock拉出后在里面输入等式即可。但是有一个问题,就是FcnBlock中输入的等式需要为和u(i)有关的等式,例如:

sin(u(1)*exp(2.3*(-u(2))));

而我们得到的ddphi2中是和M,dphi1,phi1,phi2,dphi2有关的等式,因此需要将等式中的他们修改为u(i)的形式,可以使用strrep将所有的变量替换掉,然后再输入到Fcn Blocks中,模型就建好了。

测试:

输入M = 0,初值为[π/1.1,0,π/1.1,0]时的波形:

最后

以上就是香蕉小蚂蚁为你收集整理的simulink的fcn怎么用_双摆系统的Simulink仿真(Fcn Block)的全部内容,希望文章能够帮你解决simulink的fcn怎么用_双摆系统的Simulink仿真(Fcn Block)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部