当我将来自不同运行的Matlab软件的结果与相同的输入进行比较时,我遇到了问题。为了缩小问题范围,我做了以下几点:
在不改变被调用方法的情况下,我用
进行了另一次运行我无法相信最后一行“比较”中的比较会发现轻微差异。计算包括单精度和双精度数,误差大小为1e-10(输出为双数)。
我能想象的唯一可能的解释是,在保存变量时,Matlab会失去一些精度(我认为这是不太可能的,我使用的是默认的二进制Matlab格式),或者包含的算法如a = b + c + d ,可以计算为a =(b + c)+ d或a = b +(c + d),这可能导致数值差异。
您知道上述观察结果可能是什么原因吗?
非常感谢!
答案 0 :(得分:1)
它似乎真的是由计算中的单/双混合引起的。由于我只切换到双精度,问题不再发生。感谢大家的想法。
答案 1 :(得分:0)
这些可能是舍入错误。您可以像下面这样找到系统的浮点精度:
>> eps('single')
ans =
1.1921e-07
在我的系统上,这会报告10 ^ -7,这将解释您的订单的差异
答案 2 :(得分:0)
为了确保可重现的结果,特别是如果您使用任何随机生成函数(直接或间接),您应该在每次运行开始时恢复相同的状态:
%# save state (do this once)
defaultStream = RandStream.getDefaultStream;
savedState = defaultStream.State;
save rndStream.mat savedState
%# load state (do this at before each run)
load rndStream.mat savedState
defaultStream = RandStream.getDefaultStream();
defaultStream.State = savedState;