【问题标题】:Disable Matlab symbolic rational approximation禁用 Matlab 符号有理逼近
【发布时间】:2020-02-24 14:36:49
【问题描述】:

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 = (3247657313705851*z)/2251799813685248,而不是想要的f=3^(1/3)*z

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

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

【问题讨论】:

标签: matlab symbols symbolic-math


【解决方案1】:

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

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

【讨论】:

  • (除了这个答案:)请注意,您不一定需要将所有数值转换为sym,如果您至少有,matlab 会自动将您的数值转换为符号数一个符号数字,所以f = sym(3) ^ (1/3) * z 将产生相同的输出。
  • 确实如此,但您受制于 MATLAB 的执行顺序 - 我选择强制使用 sym(1)/sym(3),因为这在双精度方面永远不会顺利。
  • 参见“创建符号数”部分
  • 这个链接应该可以直接带你去那里:uk.mathworks.com/help/symbolic/sym.html#bu1rs8g-1
猜你喜欢
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多