概述
近几天没事,开始学习一下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˙d−q˙,
e
=
q
d
−
q
e = {q_d} - q
e=qd−q。
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函数求解二阶微分方程或二阶动态方程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复