我最近将 Matlab 从 2013b 升级到 2019a(是的,我知道,发生了很多变化……但不是软件成本)。我有一些“遗留代码”大量使用符号工具箱。似乎引起大问题的一件事是符号的变化。我认为这个问题最好通过示例来提出:
2013
>> F(x) = sym('F(x)');
>> subs(diff(F,x),x,1)
ans(x) =
D(F)(1)
2019
>> F(x) = str2sym('F(x)');
>> subs(diff(F,x),x,1)
ans(x) =
subs(diff(F(x), x), x, 1)
在 2019 年,F(x) = sym('F(x)');
它不起作用,我被告知切换到F(x) = str2sym('F(x)');
哪个似乎可以按预期执行操作,但这种表示法正在扼杀我的代码。
有没有办法挽救旧的符号或者我必须重写我的代码?
编辑
很好的评论.....这是怎么破坏我的代码的?我使用符号工具来求解方程,然后根据它们的结构解析它们。例如,如果一个表达式具有三阶导数,我会将其放入 A 组。如果它具有 7 阶导数,我会将其放入 B 组。在 2013 年,很容易解析高导数...三分之一衍生品D(D(D(F)))(x)
在 2019 年看起来像这样diff(F(x), x, x, x)
。我还发现 2019 年混合了它的符号。例如
F(x) = str2sym('F(x+dx)')
F(x) =
F(dx + x)
>> diff(F,x,3)
ans(x) =
D(D(D(F)))(dx + x)
在这一点上,我认为这最终会成为一个接一个的补丁修复。如果符号是易变的,那么解析符号表达式可能不是最好的主意。我希望可能有一个“是的,去偏好并选择......”