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

Matlab 如何在这些结果之间进行正确的比较,matlab,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:如果您要逐元素查找矩阵之间的最大

假设我要解一个线性系统,
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:如果您要逐元素查找矩阵之间的最大偏差,为什么不使用
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内置函数-

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

rms_error = rms(x(:) - x_matlab(:))
您也可以对RMS错误值使用容差

注意:如果使用十进制数,可能需要使用一些使用的非零公差值,以便解决精度问题