Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我有两个矩阵x和y,它们都是来自应该计算相同结果的不同算法/例程的结果。虽然我知道isequal()会检查x和y是否为相同的矩阵,但是这些矩阵中的条目将不完全相同(即,某些条目在最坏的情况下可能会降低5%)。在这种情况下,比较它们以查看它们是否足够接近以至于被视为相同结果的最佳方法是什么?在此先感谢您的建议。
回答: 修改Edric的解决方案: absTol = 1e-3; % You choose this value to be what you want! relTol = 0.05; % This one too! absError = x(:)-y(:); relError = absError./x(:); relError(~isfinite(relError)) = 0; % Sets Inf and NaN to 0 same = all( (abs(absError) < absTol) & (abs(relError) < relTol) ); 相同的变量将是假的,如果无论是绝对或任何元素的相对误差小于公差无论您选择较大。另外,如果x的任何元素恰好是0,则relError的某些元素最终可能是无穷大或不是数字,因此我使用ISFINITE函数通过将它们设置为0来忽略这些值。 我不建议使用IMAGESC比较图,因为1)数据在显示时会缩放,2)显示器的颜色图具有离散数量的颜色值(我认为默认值为256,因此需要四舍五入) ),以及3)从两个图的视觉比较中,颜色的细微变化可能并不十分明显。 更多&回答... |
![]() |
![]() |