如何使用jblas获得ComplexDoubleMatrix的反转

时间:2014-07-24 22:19:04

标签: java matrix eigenvector eigenvalue

基本上,我想计算一个属于ComplexDoubleMatrix类的矩阵的逆,但我没有找到像inverse()或inv()这样的函数,是否有人知道如何计算a的逆矩阵?先感谢您。

我的最终目标是使用jblas.eigen创建矩阵的特征分解。 现在我目前的实现是由下面的jama库。为了执行类似的功能,我需要计算Vinverse,这就是我想在jblas中找到反函数的原因。

public static SimpleEigenDecomposition SimpleEigenDecomposition(double [][] rates)
 {
     Matrix ratesMatrix = new Matrix(rates);
     EigenvalueDecomposition ed = new EigenvalueDecomposition(ratesMatrix);
     Matrix V = ed.getV();
     Matrix D =ed.getD();
     Matrix Vinverse = V.inverse();
     Matrix resultMatrix = V.times(D).times(V.inverse());
   //check if result and rates are close enough
     SimpleMatrix trueMatrix = new SimpleMatrix(rates);
     SimpleMatrix calculatedMatrix = new SimpleMatrix(resultMatrix.getArray()) ;
     if(EJMLUtils.isClose(trueMatrix, calculatedMatrix, THRESHOLD))
   {
      return new  SimpleEigenDecomposition(V, D, Vinverse);
   }else{
     throw new RuntimeException();
     }

2 个答案:

答案 0 :(得分:3)

原因是没有逆操作,因为如果使用Cramer规则完成,那么计算成本太高。我最初认为这很奇怪,因为它可以使用Gauss Jordon消除来实现。但奇怪的是,即使我找不到一个。如果有人在JBLAS中找到它,请在下面评论。

我建议的另一种方法是使用 pinv()。它使用最小二乘法,并作为静态函数存在于 org.jblas.Solve 中。

import org.jblas.Solve

public static SimpleEigenDecomposition SimpleEigenDecomposition(double [][] rates)
{

    // inside the main function replace this for your implementation of inverse
    DoubleMatrix Vinverse = Solve.pinv(V);
}

当矩阵处于可逆状态时,Lease square pinv 给出与实际逆相同的输出。

答案 1 :(得分:2)

矩阵的反函数 A 可以通过求解 AX = I 找到,其中 I 是身份矩阵, X 将是 A 的倒数。所以,使用jblas我们可以说

DoubleMatrix Vinverse = Solve.solve(A, DoubleMatrix.eye(A.rows));

请注意,我们不能反转非方矩阵。我们可以使用isSquare方法检查矩阵 A 是正方形:

A.isSquare(); // returns true if it is