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错误值使用容差
注意:如果使用十进制数,可能需要使用一些使用的非零公差值,以便解决精度问题