如何在这些结果之间进行正确的比较

时间:2014-04-05 21:13:18

标签: matlab

我们说我必须解决线性系统Ax = b。 为了获得x,我在函数solve1中编码了一个算法,然后我想检查所获得的向量是否等于内置Matlab函数将给出的向量。

示例:

x = solve1(A, b);
x_matlab = A \ b;

if x ~= x_matlab
   error('My algorithm is not correct');
end

我知道我写的比较是不正确的,因为如果一个矢量的一个分量稍微改变,它就会失败。

提出我的想法的正确条件是什么?

1 个答案:

答案 0 :(得分:2)

方法1:如果您在逐个基础上寻找矩阵之间的最大偏差,为什么不使用max -

diff1 = abs(x - x_matlab);
max_error = max(diff1(:))

然后,如果您希望100%严格遵守平等,请使用类似 -

的内容
if max_error>0
    error('My algorithm is not correct');
end

否则,请使用一些公差值 -

if max_error>TOL
    error('My algorithm is not correct');
end

方法2:有一个用于严格比较的MATLAB内置函数 - isequal

方法3:如果您怀疑有多个元素不同,可以查看rms -

rms_error = rms(x(:) - x_matlab(:))

您也可以对RMS错误值使用容差。

注意:如果您使用的是十进制数字,则可能需要使用一些使用eps的非零容差值,以便处理精度问题。< / p>