禁用 Matlab 符号有理逼近

Disable Matlab symbolic rational approximation

Matlab Symbolic 工具有一个让我非常讨厌的功能。它会自动转换为 rational/decimal 值。

示例 1

z = sym('z', 'real');
f = 3^(1/2)*z;

我们得到预期的 Matlab return f = 3^(1/2)*z

示例 2

z = sym('z', 'real');
f = 3^(1/3)*z;

然后我得到了糟糕的结果 f = (3247657313705851*z)/2251799813685248,不是我想要的 f=3^(1/3)*z

可以找到原因 here。默认情况下 sym() 对数字使用有理近似值。

我的问题是,如何禁用此功能?比如如何从例2中得到returnf=3^(1/3)*z?

您 link 的文档告诉您如何通过强制以符号方式计算数值来解决此问题。在这种情况下,1/3 部分无法在 double 中以足够的精度表示,因此您可以这样做:

f = 3 ^ (sym(1)/sym(3)) * z;