2012-05-24 3 views
0

매트릭스의 LU 분해를 위해 ejml 라이브러리를 사용하려고합니다. 모두 SVD 분해 계산에 적합합니다. LU 분해를 위해 ejml 라이브러리를 사용하지 않습니다. 도움을 청합니다.ejml을 사용한 LU 분해

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));