给定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
好的工作。我们正在接近防弹而灵活的答案。 –