MATLAB求解函数的输出顺序

时间:2013-06-21 22:43:00

标签: 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。我使用solve函数分别使用此调用求解phiDDot和lenDDot:

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

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

任何建议都会有所帮助!!

1 个答案:

答案 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,所以无法确认这种不同的行为。