将相同输入的Matlab软件的不同运行结果进行比较时,遇到了问题。为了缩小问题,我做了以下工作:
- 使用Matlab的save()方法保存所有相关变量
- 调用计算某物的方法
- 使用save()再次保存所有相关的输出变量
在不更改调用方法的情况下,我再次进行了运行
- 加载上面保存的变量,并使用isequal()与当前输入变量进行比较
- 使用当前输入变量再次调用我的方法
- 加载上面保存的输出变量并进行比较。
我不敢相信最后一个“行”中的比较会检测到细微的差异。计算包括单精度和双精度数,误差为1e-10(输出为双精度数)。
我能想象的唯一可能的解释是,要么在保存变量时Matlab失去了一些精度(我认为这不太可能,我使用默认的二进制Matlab格式),要么包含像a = b + c + d这样的计算,计算为a =(b + c)+ d或a = b +(c + d),这可能会导致数值差异。
您知道上述观察的原因可能是什么?
非常感谢!
回答:
它实际上似乎是由计算中的单/双混合引起的。由于仅切换到双精度,因此不再出现此问题。感谢大家的想法。
更多&回答...