2013-10-14 3 views
0

Я хочу решить линейное уравнение матрица * X = D с использованием библиотеки Colt. Я пробовал:Как решить линейную систему уравнений с использованием библиотеки colt в java

DoubleMatrix2D matrix; 
matrix = new DenseDoubleMatrix2D(4,4); 
for (int row = 0; row < 4; row++) { 
    for (int column = 0; column < 4; column++) { 
     // We set and get a cell value:    
     matrix.set(row,column,row+column);   
    } 
} 
DoubleMatrix2D D; 
D = new DenseDoubleMatrix2D(4,1); 
D.set(0,0, 1.0); 
D.set(1,0, -1.0); 
D.set(2,0, 91.0); 
D.set(3,0, -5.0); 
DoubleMatrix2D X; 
X = solve(matrix,D); 

, но я получаю ошибку
«Метод решения (DoubleMatrix2D, DoubleMatrix2D) не определено для типа Test», где Test это имя класса.

Что я сделал не так? Любые идеи? ...

+1

Не могли бы вы добавить, как вы заявляете, вы 'solve' метод? – qiGuar

+0

Метод _solve_ - метод в библиотеке Colt, это не мое. Я просто хочу узнать, как использовать его в моей программе ... –

+0

Вы импортировали библиотеку Colt в свой класс? – qiGuar

ответ

1

Причина, по которой вы получаете эту ошибку, заключается в том, что метод solve() нестационар и не может быть доступен из main().

Это должно решить вашу проблему:

Algebra algebra = new Algebra(); 
DoubleMatrix2D X = algebra.solve(matrix, D); 
+0

Хороший, но когда я запускаю его я получаю сообщение об ошибке: ' Исключение в нити «основной» java.lang? .IllegalArgumentException: '' Матрица сингулярна''' в cern.colt.matrix.linalg.LUDecompositionQuick.solve (Неизвестный источник) ' ' at cern.colt.matrix.linalg.LUDecomposition.solve (Неизвестный источник) ' ' at cern.colt.matrix.linalg.Algebra.solve (Неизвестный источник) ' \t' at test.Test.main (Test.java:89) ' –

+0

Хорошо, я решил! Спасибо за ответ! :) –

1

Вы также можете использовать la4j (линейной алгебры для Java) для этого:

  • Для детерминированных систем m == n что на самом деле, ваше дело:

    // The coefficient matrix 'a' 
    Matrix a = new Basic2DMatrix(new double[][] { 
        { 1.0, 2.0, 3.0 }, 
        { 4.0, 5.0, 6.0 }, 
        { 7.0, 8.0. 9.0 } 
    }); 
    
    // A right hand side vector, which is simple dense vector 
    Vector b = new BasicVector(new double[] { 1.0, 2.0, 3.0 }); 
    
    // We will use standard Forward-Back Substitution method, 
    // which is based on LU decomposition and can be used with square systems 
    LinearSystemSolver solver = 
        a.withSolver(LinearAlgebra.FORWARD_BACK_SUBSTITUTION); 
    
    Vector x = solver.solve(b, LinearAlgebra.DENSE_FACTORY); 
    
  • Для переопределенных систем стебли m > nLinearAlgebra.LEAST_SQUARES решатель может быть использован.

Все примеры взяты с официального сайта: http://la4j.org

 Смежные вопросы

  • Нет связанных вопросов^_^