Matlab Symbolic ToolBox中的错误

时间:2012-09-03 10:47:29

标签: matlab

在使用matlab的符号工具箱

时,我偶然发现了以下奇怪的事情
  

/>> syms e

     

/>> Y = 11111111111111111 ^ E

     

y =   11111111111111112 ^ E

似乎在使用大数字时存在限制。这可以解决而不需要改变一个完全不同的系统,如圣人?

2 个答案:

答案 0 :(得分:2)

我认为问题在于Matlab在将数字转换为double之前将其解析为double 象征性的表达。由于double有一个52位的尾数,你有大约16位有效数字,但你的数字更长。

作为替代方案,您可以尝试直接从字符串创建数字:

y=sym('11111111111111111')^e

不幸的是,我现在没有Matlab,所以这个答案是未经测试的。

答案 1 :(得分:2)

这不是一个错误,它是一个功能。它被称为“四舍五入错误”

matlab使用双格式存储普通变量,就像C编程语言中的double和许多其他语言一样,如C ++。

实际上,“bug”与“^ x”无关,我们可以看到:

>> clear
>> syms y
>> format bank
>> y=11111111111111111
y =
 11111111111111112.00

即使是简单的分配也会触发“错误”。

我们可以使用调试模式看到双变量如何真正存储在VS的内存中:

enter image description here

正如您在屏幕截图中看到的那样,a和b都在内存中存储为“2ea37c58cccccccc”,这意味着计算机无法区分对方。

这就是你找到“虫子”的原因。

为避免这种情况,您可以改为使用符号常量:

>> y=sym('11111111111111111')
y =
11111111111111111

这样,计算机将以不同的格式将“y”存储在内存中,这样可以避免舍入错误并节省更多内存。