禁用Matlab符号有理逼近

禁用Matlab符号有理逼近,matlab,symbols,symbolic-math,Matlab,Symbols,Symbolic Math,Matlab符号工具对我来说有一个非常恼人的特性。它会自动转换为有理/十进制值 示例1 z = sym('z', 'real'); f = 3^(1/2)*z; 我们得到预期的Matlab返回f=3^(1/2)*z 示例2 z = sym('z', 'real'); f = 3^(1/3)*z; 然后我得到了糟糕的结果f=(324765733705851*z)/2251799813685248,不是期望的f=3^(1/3)*z 原因可以找到。默认情况下,sym()对数字使用有理近似 我的问题

Matlab符号工具对我来说有一个非常恼人的特性。它会自动转换为有理/十进制值

示例1

z = sym('z', 'real');
f = 3^(1/2)*z;
我们得到预期的Matlab返回
f=3^(1/2)*z

示例2

z = sym('z', 'real');
f = 3^(1/3)*z;
然后我得到了糟糕的结果
f=(324765733705851*z)/2251799813685248
,不是期望的
f=3^(1/3)*z

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


我的问题是,如何禁用此功能?例如,如何从示例2中获取return
f=3^(1/3)*z

您链接到的文档告诉您如何通过强制以符号方式计算数值来解决此问题。在这种情况下,
1/3
片段在
double
中无法以足够的精度表示,因此您可以执行以下操作:

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

(除了这个答案:)注意到您不一定需要将所有数值转换为
sym
,如果您至少有一个符号数,matlab会自动将数值转换为符号数,因此
f=sym(3)^(1/3)*z
将产生相同的输出,但是你要听命于MATLAB的执行顺序-我选择强制
sym(1)/sym(3)
,因为这在双精度中永远不会很好。请参阅“创建符号数字”部分。此链接应该直接带你到那里:re'?'是的,但你为什么要问我的符号,当我只是使用别人的符号时?@BCLC Hmmmm???发生什么事了?Nathan爆炸,你可以编辑我的答案。由于当前已暂停/重新启动,我当前无法启动