我是靠谱客的博主 负责自行车,最近开发中收集的这篇文章主要介绍Matlab S函数求解二阶微分方程或二阶动态方程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

近几天没事,开始学习一下Matlab S函数求解二阶微分方程,具体方程表达式如下:
D ( q ) q ¨ + C ( q , q ˙ ) q ˙ = τ Dleft( q right)ddot q + C(q,dot q)dot q = tau D(q)q¨+C(q,q˙)q˙=τ (2.1)
τ = K d e ˙ + K p e tau = {K_d}dot e + {K_p}e τ=Kde˙+Kpe (2.2)
其中, e ˙ = q ˙ d − q ˙ dot e = {dot q_d} - dot q e˙=q˙dq˙ e = q d − q e = {q_d} - q e=qdq q q q实际输出结果, q d q_d qd期望输出的结果。
仿真参数设置如下:
p = [ 2.90 ,   0.76 ,   0.87 ,   3.04 ,   0.87 ] T p=[2.90, space 0.76, space 0.87, space 3.04, space 0.87]^T p=[2.90, 0.76, 0.87, 3.04, 0.87]T q 0 = [ 0.0 ,   0.0 ] T q_0 = [0.0,space 0.0]^T q0=[0.0, 0.0]T q ˙ 0 = [ 0.0 ,   0.0 ] T dot q_0 = [0.0,space 0.0]^T q˙0=[0.0, 0.0]T q d ( 0 ) = [ 1.0 ,   1.0 ] T q_d(0) = [1.0,space 1.0]^T qd(0)=[1.0, 1.0]T K p = d i a g ( [ 100 ,   100 ] ) K_p = diag([100, space 100]) Kp=diag([100, 100]) K d = d i a g ( [ 100 ,   100 ] ) K_d = diag([100, space 100]) Kd=diag([100, 100]) D ( q ) = [ p 1 + p 2 + 2 p 3 c o s q 2 ,   p 2 + p 3 c o s q 2 ;   p 2 + p 3 c o s q 2 ,   p 2 ] Dleft( q right) = [p_1+p_2+2p_3cosq_2,space p_2+p_3cosq_2;space p_2+p_3cosq_2,space p_2] D(q)=[p1+p2+2p3cosq2, p2+p3cosq2; p2+p3cosq2, p2] C ( q , q ˙ ) = [ − p 3 q ˙ 2 s i n q 2 ,   − p 3 ( q ˙ 1 + q ˙ 2 ) s i n q 2 ;   p 3 q ˙ 1 s i n q 2 ,   0 ] C(q,dot q)=[-p_3dot q_2 sin q_2,space -p_3(dot q_1 + dot q_2) sin q_2; space p_3dot q_1 sin q_2,space 0] C(q,q˙)=[p3q˙2sinq2, p3(q˙1+q˙2)sinq2; p3q˙1sinq2, 0]
编程分析,首先等式(2.1)左右都含有带求解未知数q,所以把等式左右两边都写成S函数求解。等式(2.2)S函数编写分析:左边 τ tau τ当成输出,是个二维向量。右边有两个输入变量 q ˙ , q dot q,q q˙,q,其中 q ˙ d , q d dot q_d,q_d q˙d,qd是常数已知。每个变量又都是二维向量,所以S函数的输入数量 4,输出数量 2,并且输出和输入是有关系的直接反馈参数设置1,其他参数默认。

编写等式(2.2)分析,等式可以改写成: D ( q ) q ¨ = τ − C ( q , q ˙ ) q ˙ Dleft( q right)ddot q = tau - C(q,dot q)dot q D(q)q¨=τC(q,q˙)q˙,这个一个矩阵求解:可以写成两种形式: q ¨ = i n v ( D ( q ) ) ∗ ( τ − C ( q , q ˙ ) q ˙ ) ddot q = inv(Dleft( q right))*left( tau - C(q,dot q)dot q right) q¨=inv(D(q))(τC(q,q˙)q˙)或者 q ¨ = ( D ( q ) ) ( τ − C ( q , q ˙ ) q ˙ ) ddot q = (Dleft( q right)) backslash left( tau - C(q,dot q)dot q right) q¨=(D(q))(τC(q,q˙)q˙)。第二种求解方法比较快并且精度高,推荐第二种方法求解。由于是个二阶微分方程,且每个变量是二维所以S函数的连续状态变量数是 4,输出分别是变量 q , q ˙ q,dot q q,q˙,所以输出变量数也是4,此处的4个输出会作为等式(2.1)的输入,数量必须相同。输入变量是 τ tau τ,所以输入变量数是 2。由于输出函数sys=mdlOutputs(t,x,u)中,sys = x,x是状态变量,输出和输入没有直接关系,所以直接反馈参数理论上应该设置0,但实际上设置1结果也是正确的,由于能力有限暂时不清楚原因。

由于CSND插入MATLAB代码失败所以,把文件压缩上传到CSDN共大家参考。
https://download.csdn.net/download/cswh876908060/12151665
如有问题或者需要代写,代做,指导,请联系QQ:876908060

最后

以上就是负责自行车为你收集整理的Matlab S函数求解二阶微分方程或二阶动态方程的全部内容,希望文章能够帮你解决Matlab S函数求解二阶微分方程或二阶动态方程所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部