导数符号符号的Matlab变化

标签 matlab mupad

我最近将 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 switch notation 变为 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变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60275084/

相关文章:

matlab - 如何在matlab中实现二叉树

matlab - 停止在 MATLAB GUI 中播放 wav 文件

matlab - 从 MuPAD 提取多项式到 Matlab

matlab - 如何在 Matlab 上为符号表达式编写 `lhs()` 或 `rhs()` 函数

plot - 在 MuPAD 中将轴刻度设置为对数

matlab - mtaylor MuPAD - Matlab

matlab - Pretty MuPad : Output of assignment, 表达式和一行结果 - 如何创建该函数?

Matlab 分析

matlab - 如何在 Matlab 中打印字符串?

MATLAB - 将元胞数组写入 csv 文件