我正在将两个矩阵 A 和 B 相乘。当我将 A 和 B 相乘时,我应该得到单位矩阵,但有时我得到 1.0000 或 -0.0000 不是得到 0 和 1。当然,这是由于矩阵具有浮点数的原因。
是否有可能以某种方式将此条目自动转换为整数(即 -0.0000 没有任何意义,1.0000 可能只是 1)?
如果我理解正确,你只是想看看,乘法的结果与单位矩阵没有太大区别。您可以使用以下代码进行检查:
Result= A*B
Id=eye(size(Result))
eps=.2 %tolerance
% bigError == 1, if there is a error bigger than eps for an entry in the matrix, 0 otherwise:
bigError=any(abs(Result(:)-Id(:))>eps)
您可以按照以下代码中的语法来实现上面建议的舍入,而不会意外地隐藏不接近 0 或 1 的舍入值的错误。
% Values in matrix to be rounded if within tol.
RoundElim = [0 1];
tol = 1e-12; % ensure that tol is greater than eps
% (floating point relative accuracy).
n = 4;
In = eye(n);
A = rand(n,n);
B = In/A; % Inverse of A
C = A*B
Cprev = C;
% Eliminate rounding from 0 and 1 entries
for i = 1:size(RoundElim,2)
C(abs(C-RoundElim(i)) < tol) = RoundElim(i);
end
C
ErrorInf = norm(C-Cprev,'inf')
如果您只想检查矩阵中的每个条目是否接近相应单位矩阵中的条目,我建议使用"inf"范数。