两个矩阵之间的相对误差

时间:2011-10-12 16:04:27

标签: r matrix

给定R中的两个浮点矩阵,我想得到每个条目之间的相对误差,然后在所有错误中搜索所有错误的最大值并将其与10%进行比较,即MAX_ERROR <= 10%

我知道raltive错误是(对于每个条目):

|v_ij(MATRIX1) - v_ij(MATRIX2)| / | v_ij(MATRIX1)|

如何在R中执行此操作,避免使用for循环?

4 个答案:

答案 0 :(得分:4)

如果您想确定哪个元素未通过该测试,请尝试以下方法:

over_err <- which( abs(MATRIX1-MATRIX2)/abs(MATRIX1) > 0.1, arr.ind=TRUE)

如果你想在MATRIX1中显示满足(或不满足)条件的索引和值列表,那么:

cbind(over_err, MATRIX1[over_err])

答案 1 :(得分:4)

如果你想处理矩阵中有零的情况(否则会导致除零),这个答案有一些解决方案: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

请注意,这会计算出的相对误差与您的定义略有不同:它是对称的并处理小值 - 由于它而有点慢......

答案 2 :(得分:3)

以下内容应该有效:

maxerr <- max(abs((a - b) / a))

其中ab是两个矩阵。要将结果转换为百分比,请乘以100

答案 3 :(得分:1)

如果精确矩阵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