【问题标题】:Compare symbolic variables比较符号变量
【发布时间】:2018-02-09 14:51:51
【问题描述】:

我正在尝试比较两个符号变量(数字)。整个问题归结为以下代码。

R = vpa(0.555555555555555555555555555);
isAlways(R>R*(1-sym(10^(-10))))
isAlways(R>R*(1-sym(10^(-50))))

两个比较都应该返回1,但第二个返回0


我的解决方案:

digits(51);
R = vpa(0.555555555555555555555555555);
isAlways(R>R*(1-sym(10^(-10))))
isAlways(R>R*(1-sym(10^(-50))))

【问题讨论】:

  • vpa 的默认精度是 32 位,如果要比较到 50,则需要指定适当的精度。

标签: matlab symbolic-math


【解决方案1】:

为什么会遇到这个问题

vpa 使用可变精度浮点运算(默认为 32 个有效数字)评估符号输入...所以你的情况是

>> R = vpa(0.555555555555555555555555555)

R =

0.55555555555555555555555555555556

>> R*(1-sym(10^(-50)))

ans =

0.55555555555555555555555555555556

32位绝对不足以存储1-10^(-50)的实际值。

如何解决

不用强调vpa(),您可以将RR * (1 - 10^(-50)) 都声明为符号(实际上是0.5555555... = 5/9),然后比较它们:

>> R = str2sym('5/9');
>> X = str2sym('5/9 * (1 - 10^(-50))');
>> isAlways(R > X)

ans =

  logical

   1

【讨论】:

  • 在根据他的评论编辑您的答案之前,我认为值得对 @LuisMendo 说声谢谢。
  • 没问题!删除评论以避免混淆
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多