1

我一直在修改 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 求解微分方程时,不知道变量的顺序成为一个大问题。

任何意见将是有益的!!

4

1 回答 1

1

我相信它是根据您的方程式中变量名称的 ASCII 值按字母顺序排列的。根据文档solve,用于sym/symvar在您不提供输出变量名称的情况下解析方程。的帮助sym/symvar表明它按字典顺序返回变量,即按字母顺序(symvar通过调用 来执行相同的操作,即使它没有这么说setdiff)。如果您查看solve.m 的实际代码(edit solve在您的命令窗口中输入)并检查调用的assignOutputs子函数(R2012b 中的第190 行),您会看到它调用sort并且有关于字典顺序的注释。

在 R2012b(可能更早)中,文档与 R2013a 的文档在某种程度上与您的问题相关。在 R2013a 中,添加了这句话

如果您明确指定自变量vars,则求解器使用相同的顺序返回解。

我仍在运行 R2012b,所以我无法确认这种不同的行为。

于 2013-06-23T20:04:38.293 回答