【发布时间】:2013-11-17 11:08:59
【问题描述】:
我在 Matlab 中创建了一个随机双精度值
x = rand(1,1);
然后显示 x 的所有可能位数
vpa(x,100)
并获得:
0.2238119394911369 7971853298440692014992237091064453125
我将 x 保存为 .mat 文件,并将其导入 Mathematica,然后进行转换:
y = N[FromDigits[RealDigits[x]],100]
并获得:
0.2238119394911369 0000
然后回到Matlab并使用(将所有Mathematica数字复制并粘贴到Matlab):
vpa(0.22381193949113690000,100)
并获得:
0.22381193949113689 64518061375201796181499958038330078125
为什么同一个双精度变量有显着差异?
在 Mathematica 和 Matlab 之间交换数据时如何弥合差距?
【问题讨论】:
-
如果你想“精确地”传输“双精度”(64 位)数据,你应该使用标准的二进制格式,省去所有来回转换到 base 10 的问题。
-
如果需要在保证不丢失的情况下传输双精度数据,最方便快捷的方式是使用MATLink。 (免责声明:我是MATLink的开发者之一。)你会发现,来回传输一个号码后,绝对没有区别。
-
嗨,@Szabolcs,谢谢你的建议。这个难题来自我在通过 Mathematica 和 matlab/C++ 以多精度(高于两倍)求解非线性系统时的经验:Mathematica 比其他“多精度”实现提供了更好、更准确的结果。当 Mathematica 不可用或我更加注重效率时,我非常想了解原因以及如何避免此类问题,因为 Mathematica 通常比其他实现慢。
-
嗨,@Szabolcs,我还注意到在 Mathematica 中,有一个“NETLink”包也适用于 Mathematica 和 Matlab 之间的通信,有什么区别?我不仅想在matlab和mathematica之间传输数据,还想在mathematica中以多精度计算原始双精度。 Mathlink 如何处理它? "N[FromDigits[RealDigits[x]],userPrecision]" 和 Mathlink 有什么区别? Mathlink 是否支持在 Matlab 脚本中调用 Mathematica 引擎?谢谢
-
嗨@Szabolcs,我发现MathLink 只传输双精度数据。如何将 Matlab 中双数的 Mathematica 工作精度设置为多精度?我能想象的唯一可靠的方法仍然是 N[FromDigits[RealDigits[x]],userPrecision]...
标签: matlab wolfram-mathematica digits double-precision