【问题标题】:How to get the inverse of a ComplexDoubleMatrix using jblas如何使用 jblas 获得 ComplexDoubleMatrix 的逆
【发布时间】:2014-07-24 22:19:04
【问题描述】:

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

我的最终目标是使用 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();
     }

【问题讨论】:

    标签: java matrix eigenvector eigenvalue


    【解决方案1】:

    原因是没有逆运算,因为如果使用克莱默规则完成,那么计算量太高了。我最初认为这很奇怪,因为它可以使用 Gauss Jordon 消除来实现。但奇怪的是连我都找不到。如果有人在 JBLAS 中找到它,请在下面发表评论。

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

    导入 org.jblas.Solve 公共静态 SimpleEigenDecomposition SimpleEigenDecomposition(double [][] rates) { // 在主函数内部替换这个为你的逆实现 DoubleMatrix Vinverse = Solve.pinv(V); }

    当矩阵可逆时,租赁平方 pinv 给出与实际逆相同的输出。

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-29
        • 2013-01-01
        • 2020-10-29
        • 2020-03-22
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多