2013-06-21 244 views
1

我一直在修补MATLAB求解函数一段时间,但似乎看不出它如何确定它输出符号变量的顺序。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。我用解决函数来求解phiDDot和lenDDot单独使用该呼叫:

[eom2, eom1] = solve(Lag(1)==0, Lag(2)==0, ddphi, ddlen); 

为ddphi该溶液对应于输出的矩阵的第二项,而ddlen对应于矩阵中的第一项。我想知道是否有某种方法可以让MATLAB先输出ddphi,然后再输出ddlen,或者至少确定它们输出的顺序。当我解决4个以上的变量时,不知道变量的顺序变成了一个大问题,并试图使用ode45来求解微分方程。

任何意见将有所帮助!

回答

1

我相信它是基于您的方程中变量名称的ASCII值的字母。根据documentationsolve,在您不提供输出变量名称的情况下,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,所以无法确认这种不同的行为。