在Matlab中将仅作为小数部分的零的浮点数转换为整数

时间:2016-02-28 22:22:34

标签: matlab matrix type-conversion linear-algebra

我将两个矩阵A和B相乘。当我乘以A和B时,我应该获得单位矩阵,但有时不是获得0和1,而是获得1.0000或-0.0000。当然这是因为一个矩阵具有浮点数。

是否有可能以某种方式将此条目自动转换为整数(即​​-0.0000没有任何意义,1.0000可能只是1)?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你只想看到,乘法的结果与单位矩阵的差别不大。您可以使用以下代码进行检查:

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)

答案 1 :(得分:0)

您可以按照以下代码中的语法来实现上面建议的舍入,而不会意外地隐藏不接近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')

如果您只是想检查矩阵中的每个条目是否接近相应的单位矩阵中的条目,我建议使用&#39; inf&#39;常态。