給定R中的兩個浮點矩陣,我想得到每個條目之間的相對誤差,然後在所有誤差中搜索所有誤差的最大值並將其與10%進行比較,即MAX_ERROR <= 10%
兩個矩陣之間的相對誤差
我知道raltive錯誤的是(對每個條目):
|v_ij(MATRIX1) - v_ij(MATRIX2)|/| v_ij(MATRIX1)|
如何做到這一點的R
,避免for循環?
給定R中的兩個浮點矩陣,我想得到每個條目之間的相對誤差,然後在所有誤差中搜索所有誤差的最大值並將其與10%進行比較,即MAX_ERROR <= 10%
兩個矩陣之間的相對誤差
我知道raltive錯誤的是(對每個條目):
|v_ij(MATRIX1) - v_ij(MATRIX2)|/| v_ij(MATRIX1)|
如何做到這一點的R
,避免for循環?
如果你想處理,其中基質中有零(這由零,否則會導致分裂)的情況下,這個答案有一些解決方案:Do you reassign == and != to isTRUE(all.equal())?
的almostEqual
功能的一個稍微的改變我暗示將產生:
relativeError <- function(x, y, tolerance=1e-8) {
diff <- abs(x - y)
mag <- pmax(abs(x), abs(y))
ifelse(mag > tolerance, diff/mag, diff)
}
m1 <- cbind(c(0,1), c(1,1))
m2 <- cbind(c(0,1), c(1,1.11))
any(relativeError(m1, m2) > 0.01) # TRUE
# Building on @DWin's answer:
which(relativeError(m1, m2) > 0.01, arr.ind=TRUE) # 2 2
注意,這不是你的定義略有不同,計算相對誤差:它是對稱的,並處理小的值 - 這是因爲它慢一點。 ...
下面應該工作:
maxerr <- max(abs((a - b)/a))
其中a
和b
是兩個矩陣。將結果轉換爲百分比,乘以100
。
如果wnat確定哪些元素不能在該試驗那就試試這個:如果你想dispaly指數和值的矩陣1滿足列表(或不能滿足),該條件,那麼
over_err <- which(abs(MATRIX1-MATRIX2)/abs(MATRIX1) > 0.1, arr.ind=TRUE)
:
cbind(over_err, MATRIX1[over_err])
如果精確矩陣M_exact和近似矩陣是M_app;然後使用Mathematica,誤差百分比可以計算爲
error(%) = 100(Norm[M_app - M_exact]/Norm[M_exact])
要在矩陣元素
Relative_error = (Abs[M_app - M_exact])/Abs[M_exact]
檢查相對誤差對於進一步的細節: http://www.netlib.org/lapack/lug/node75.html
好的工作。我們正在接近防彈而靈活的答案。 –