我们说我必须解决线性系统Ax = b
。
为了获得x
,我在函数solve1
中编码了一个算法,然后我想检查所获得的向量是否等于内置Matlab函数将给出的向量。
示例:
x = solve1(A, b);
x_matlab = A \ b;
if x ~= x_matlab
error('My algorithm is not correct');
end
我知道我写的比较是不正确的,因为如果一个矢量的一个分量稍微改变,它就会失败。
提出我的想法的正确条件是什么?
答案 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>