在R中计算复矩阵的行列式

6
有没有一种方法可以计算复杂矩阵的行列式?
F4<-matrix(c(1,1,1,1,1,1i,-1,-1i,1,-1,1,-1,1,-1i,-1,1i),nrow=4)
det(F4)
Error in determinant.matrix(x, logarithm = TRUE, ...) : 
  determinant not currently defined for complex matrices

library(Matrix)
 determinant(Matrix(F4))
Error in Matrix(F4) : 
  complex matrices not yet implemented in Matrix package
Error in determinant(Matrix(F4)) : 
  error in evaluating the argument 'x' in selecting a method for function 'determinant'

使用 EigenR 软件包,这是可能的。 - Stéphane Laurent
2个回答

4
如果你使用 prod(eigen(F4)$values),我建议改用 prod(eigen(F4, only.values=TRUE)$values)。请注意,只有当你只关心绝对值或者 Mod() 时才推荐使用 qr()
 prod(abs(Re(diag(qr(x)$qr))))

给出 Mod(行列式(x))
{在 X = QR 中,|det(Q)|=1 且 R 的对角线是实数(至少在 R 中)。}

顺便提一句,你是否注意到了 help(determinant) 页面上的警告:

通常,计算行列式并不是解决问题的最佳方法。


3
如果您知道矩阵A的特征多项式可以分解为线性因子,那么det(A)就是A的特征值的乘积,并且您可以使用类似于这个的特征值函数来解决您的问题。我怀疑您仍然想要更好的东西,但这可能是一个开始。

目前我也使用prod(eigen(F4)$values)。 - gd047

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接