基本上,我想计算一个属于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();
}
答案 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