2012-05-24 37 views
0

我想使用ejml庫進行矩陣的LU分解。一切順利的SVD分解的計算,對於LU分解我不知道使用ejml庫。我希望你的幫助LU分解使用ejml

import java.util.Scanner; 
import org.ejml.alg.dense.decomposition.CholeskyDecomposition; 
import org.ejml.alg.dense.decomposition.DecompositionFactory; 
import org.ejml.alg.dense.decomposition.DecompositionInterface; 
import org.ejml.alg.dense.decomposition.LUDecomposition; 
import org.ejml.alg.dense.decomposition.lu.*; 
import org.ejml.data.DenseMatrix64F; 
import org.ejml.simple.SimpleMatrix; 
import org.ejml.simple.SimpleSVD; 


public class autovalori { 
public static void main(String[] args) { 


double[][] matrix; 
double[] u; 
int r, c, t = 0; 


Scanner scanner = new Scanner(System.in); 

System.out.println("Insert row matrix: "); 
r = scanner.nextInt();//row matrix 
System.out.println("Insert columns matrix: "); 
c = scanner.nextInt(); //columns matrix 
matrix = new double[r][c]; 



    for (int i = 0; i < r; i++){ 
     for (int j = 0; j < c; j++){ 

      System.out.printf("value: " + i + " - " + j); 
      System.out.printf("\n"); 
      matrix[i][j] = scanner.nextDouble(); 

     } 
    } 

    System.out.printf("\n"); 


    SimpleMatrix A = new SimpleMatrix(matrix); 

    SimpleSVD SVD = A.svd(); 
    SimpleMatrix U = SVD.getU(); 
    SimpleMatrix S = SVD.getV(); 
    SimpleMatrix V = SVD.getW(); 

    U.print(); 
    S.print(); 
    V.print(); 

回答

1

SimpleMatrix接口不提供直接的方法來計算LU分解。相反,您需要從分解算法中進行計算。

SimpleMatrix A = new SimpleMatrix(10,5); 

    LUDecomposition<DenseMatrix64F> lu = DecompositionFactory.lu(A.numCols()); 

    if(!lu.decompose(A.getMatrix())) { 
     throw new RuntimeException("LU Decomposition failed!"); 
    } 

    SimpleMatrix L = SimpleMatrix.wrap(lu.getLower(null)); 
    SimpleMatrix U = SimpleMatrix.wrap(lu.getUpper(null));