我將兩個矩陣A和B相乘。當我乘以A和BI時應該獲得單位矩陣,但有時不是獲得0和1,而是獲得1.0000或-0.0000。當然這是由於一個矩陣有浮點數造成的。將只有零的浮點數作爲小數部分轉換爲整數的小數部分在Matlab中
是否有可能以某種方式將這些條目自動轉換爲整數(即-0.0000沒有任何意義,而1.0000可能只是1)?
我將兩個矩陣A和B相乘。當我乘以A和BI時應該獲得單位矩陣,但有時不是獲得0和1,而是獲得1.0000或-0.0000。當然這是由於一個矩陣有浮點數造成的。將只有零的浮點數作爲小數部分轉換爲整數的小數部分在Matlab中
是否有可能以某種方式將這些條目自動轉換爲整數(即-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)
我依靠內置的[**'eps' **](http://www.mathworks.com/help/matlab/ref/eps.html)函數。 – thewaywewalk
您可以按照在代碼的語法低於實現四捨五入上述建議沒有意外地從四捨五入不接近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'規範。
也許'圓'?不知道你想要什麼。 – Daniel
@丹尼爾哇,令人難以置信的,'圓'可以直接應用於矩陣?!!我不知道......你認爲應用「round」還是堅持原來的結果是個好主意?當然,你不知道我在做什麼...在我的情況下,我只是想表明'A'和'B'的乘法產生單位矩陣,但是通過四捨五入,我最終可以隱藏一些錯誤我可能有... – nbro
它是MATLAB(MATrix LABoratory),你可以將大部分函數應用於矩陣;)。不知道你的情況,我不知道你的情況是什麼。如果你知道你的結果是整數,**精度誤差<0.5,**使用'round'。這是我反覆使用round的情況。也可能有其他情況。 – Daniel