导数符号中的 Matlab 变化



我最近将 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)

在这一点上,我认为这最终会成为一个又一个的补丁修复。如果符号不稳定,则解析符号表达式可能不是最佳主意。我希望可能会有一个"是的,转到首选项并选择......">

如果添加类似+dx的东西会使 2019 年将符号切换到D,也许你可以一直做这样的事情,然后替换掉额外的东西?我没有象征性的工具箱,所以不能实验,而只是一个想法。

F(x) = str2sym('F(x)');更改为

F(x) = str2sym('F(x+dx)');

然后使用

subs(diff(F,x),x + dx,1)

返回D(F)(1),含义与subs(diff(F(x), x), x, 1)相同

(要求 MATLAB 2019a 或更高版本)

不是关于如何恢复旧语法的答案,而是您描述的问题。以下是我将如何解决它:

%some example input
syms x f(x)
g=diff(f,x,3)+8
%find the expression with `diff` and get its arguments
a=children(findSymType(g,'diff'))

这将返回[ f(x), x, x, x],这意味着您所要做的就是扔掉第一个元素并计算x

相关内容

  • 没有找到相关文章

最新更新