比较符号变量

时间:2018-02-09 14:51:52

标签: matlab symbolic-math

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

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))))

1 个答案:

答案 0 :(得分:2)

为什么遇到这个问题

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