我一直在修补MATLAB求解函数,但似乎无法确定它输出符号变量的顺序。
具体来说,我有一个方程系统,我想同时解决。
a = f(a, b, c, d)
b = f(a, b, c, d)
c = f(a, b, c, d)
d = f(a, b, c, d)
并且这些方程是符号的并且具有其他符号变量(除了a,b,c和d之外)。 (因此解决方案输出不是数字,而是符号)。
例如,当我解决倒立弹簧摆的运动方程时,我有两个方程,它们都依赖于phiDDot和lenDDot。我使用solve函数分别使用此调用求解phiDDot和lenDDot:
[eom2, eom1] = solve(Lag(1)==0, Lag(2)==0, ddphi, ddlen);
ddphi的解决方案对应于输出的矩阵的第二项,而ddlen对应于矩阵的第一项。我想知道是否有某种方法可以告诉MATLAB首先输出ddphi,然后输出ddlen,或者至少确定它们的输出顺序。当我解决4个以上的变量并尝试使用ode45求解微分方程时,不知道变量的顺序就成了一个大问题。
任何建议都会有所帮助!!
答案 0 :(得分:1)
我认为它是基于方程中变量名的ASCII值的字母顺序排列的。根据{{1}}的{{3}},documentation用于在不提供输出变量名称的情况下解析方程式。 solve
的帮助表示它返回sym/symvar
中的变量,即字母(lexicographical order执行相同操作,即使它没有这样说,也可以调用symvar
)。如果你查看solve.m的实际代码(在命令窗口中输入sym/symvar
)并检查名为edit solve
的子函数(R2012b中的第190行),你会看到它打了一个电话至setdiff
并且有关于词典顺序的评论。
在R2012b(可能更早)中,文档与R2013a的文档不同,其方式似乎与您的问题相关。在R2013a中,sort
:
如果明确指定自变量
assignOutputs
,则求解器使用相同的顺序 返回解决方案。
我还在运行R2012b,所以无法确认这种不同的行为。