我已经修补了一段时间的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求解微分方程时,不知道变量的顺序就成了一个大问题。
任何建议都会很有帮助!
发布于 2013-06-24 04:04:38
我相信它是按字母顺序排列的,基于你方程式中变量名的ASCII值。根据solve的documentation,在未提供输出变量名称的情况下,sym/symvar用于解析公式。sym/symvar的帮助表明它返回lexicographical order中的变量,即按字母顺序(symvar通过调用setdiff来做同样的事情,尽管它没有这样做)。如果您查看solve.m的实际代码(在命令窗口中输入edit solve ),并检查名为assignOutputs的子函数(R2012b中的第190行),您将看到它调用了sort,并且有一个关于字典序顺序的注释。
在R2012b (以及可能更早的版本)中,文档与R2013a的不同之处在于它似乎与您的问题相关。在R2013a中,this sentence is added
如果显式指定自变量
vars,则求解器将使用相同的顺序返回解决方案。
我仍然在运行R2012b,所以我不能确认这种不同的行为。
https://stackoverflow.com/questions/17245364
复制相似问题