在Matlab中比较两个矩阵

sta*_*tor 14 floating-point comparison matlab matrix

我有两个矩阵x和y,两者都是来自不同算法/例程的结果,它们应该计算相同的结果.虽然我知道isequal()会检查x和y是否是相同的矩阵,但这些矩阵中的条目不会完全相同(即某些条目在最坏的情况下可能会有5%的折扣).在这种情况下,比较它们以确定它们是否足够接近被认为是相同结果的最佳方法是什么?提前感谢您的建议.

And*_*erd 13

试试这个:

tf = abs((A-B)./B)<0.05
Run Code Online (Sandbox Code Playgroud)

如果A和B之间相对于B的相对差异小于5%,这将返回逻辑矩阵,对于每个元素将为真.

如果你想询问所有这些是否属实(它们都满足上述条件):

all(tf(:))
Run Code Online (Sandbox Code Playgroud)


gno*_*ice 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) );
Run Code Online (Sandbox Code Playgroud)

变量同样将是错误的,如果任一绝对任何元素的相对误差小于公差无论您选择较大.此外,如果x的任何元素恰好为0,则relError的某些元素可能最终为无限或非数字,因此我使用ISFINITE函数通过将它们设置为0来忽略这些值.

我不建议使用IMAGESC来比较图,因为1)数据在显示时被缩放,2)显示器的颜色图具有离散数量的颜色值(我认为默认为256,因此大量舍入)和3)从两个图的视觉比较中可能不会明显看出颜色的细微变化.