背景关联
空间机械臂通过计算关节指令实现自身运动,同时会对基座产生扰动。根据航天器与机械臂的运动学方程,以及组合体满足线动量和角动量守恒条件,可以列出一个既包含运动学微分方程,同时满足动量守恒条件的方程组,即微分代数方程组(differential algerbic equation)
切入正题
这类方程形式复杂,很难得到解析解,通常采用数值解法计算。MATLAB中的odes求解器可以求解常微分方程组,也可以解决本文中的DAE问题。
相较于常微分方程解法,DAE只需要增加一个mass参数即可,这个参数的功能是将方程组中的等式约束条件(即代数方程),转换成微分方程的形式。
算例
DAE方程组为:
设置Mass属性M矩阵:
其含义为:
接下来就可以使用ode15s或者ode23s进行解算~
代码
dae_test.m
1
2
3
4
5
function dy=dae_test(t,y)
dy(1)=-0.04*y(1)+1e4*y(2)*y(3);
dy(2)=0.04*y(1)-1e4*y(2)*y(3)-3e7*y(2)*y(2);
dy(3)=y(1)+y(2)+y(3)-1;
dy=dy';
main.m
1
2
3
4
5
6
7
8
9
10
11
12
clc;clear;close;
y0=[1;0;0];
tspan = [0 4*logspace(-6,6)];
M=[1,0,0;
0,1,0;
0,0,0];
options=odeset('mass',M,'RelTol',1e-4,'AbsTol',[1e-6 1e-10 1e-6]);
[t,y]=ode15s(@dae_test,tspan,y0,options);
y(:,2) = 1e4*y(:,2);
semilogx(t,y);
ylabel('1e4 * y(:,2)');
title('DAE problem solved by ode15s');