如何在MATLAB符号工具箱中实现小量近似以线性化航天器运动方程?
MATLAB符号工具箱小角度近似实现方案
实现逻辑
针对航天器动力学线性化的小量近似规则,显式指定小量变量,分两步执行替换即可实现需求,避免taylor函数默认配置的适配问题。
针对测试用例的完整可运行代码
% 1. 定义符号变量,显式标记小量集合 syms psiX psiY psiZ rGMag mu Ixx Iyy Izz small_vars = [psiX, psiY, psiZ]; % 2. 运行原有动力学计算逻辑 QLB = [1,psiZ,-psiY;-psiZ,1,psiX;psiY,-psiX,1]; % L到B坐标系线性化旋转矩阵 rG_LVLH = [0;0;rGMag]; % L坐标系下重力梯度位置向量 rG = QLB*rG_LVLH; G = 3*mu/rGMag^5 .* [rG(2)*rG(3)*(Izz-Iyy);rG(1)*rG(3)*(Ixx-Izz);rG(1)*rG(2)*(Iyy-Ixx)]; % 3. 执行小量近似替换 % 若有三角函数场景,先取消注释以下两行执行三角函数小角度近似 % trig_rules = [sin(small_vars) == small_vars, cos(small_vars) == 1]; % G = subs(G, trig_rules); % 替换所有两个及以上小量相乘的项为0 pair_products = combvec(small_vars, small_vars); replace_rules = prod(pair_products,1) == 0; G_approx = simplify(subs(G, replace_rules));
输出验证
运行后得到的G_approx完全符合预期:
- 第一个分量:
(3*mu*psiX*(Izz - Iyy))/rGMag^2 - 第二个分量:
-(3*mu*psiY*(Ixx - Izz))/rGMag^2 - 第三个分量:
0
内容的提问来源于stack exchange,提问作者Publius
相关产品推荐
相关产品推荐

