禁用 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;
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;