2012-05-20 3 views
0

Я работаю над небольшим Java-приложением, которое выполняет вычисления на матрицах. Это то, что я сделал сейчас, чтобы вычислить детерминант и инвертировать квадратную матрицу. Но я хочу использовать класс Jama для вычисления собственных значений и собственных векторов, но я не знаю, как его использовать, может ли кто-нибудь дать мне руку? Благодарю.Использование Jama для вычисления собственных значений/собственных векторов?

import java.util.Scanner; 
import Jama.*; 

public class matrix { 
    public static void main(String[] args) { 
     double[][] matrix; 
     double det; 
     int n; 

     Scanner scanner = new Scanner(System.in); 

     System.out.println("Dimension of the matrix: "); 
     n = scanner.nextInt(); 

     matrix = new int[n][n]; 

     // insert values 
     for (int i = 0; i < n; i++) { 
     for (int j = 0; j < n; j++) { 

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

     } 
     } 

     // calculate determinant 
     det = dete(matrix, n); 
    } 

    private static dete(double ai[][], int i) { 
     double l = 0; 
     if (i == 1) 
     l = ai[0][0]; 
     else if (i == 2) { 
     l = ai[0][0] * ai[1][1] - ai[0][1] * ai[1][0]; 
     } else { 
     double ai1[][] = new double[i - 1][i - 1]; 
     for (int k = 0; k < i; k++) { 
      for (int i1 = 1; i1 < i; i1++) { 
       int j = 0; 
       for (int j1 = 0; j1 < i; j1++) 
        if (j1 != k) { 
        ai1[i1 - 1][j] = ai[i1][j1]; 
        j++; 
        } 

      } 

      if (k % 2 == 0) 
       l += ai[0][k] * dete(ai1, i - 1); 
      else 
       l -= ai[0][k] * dete(ai1, i - 1); 
     } 

     } 
     return l; 
    } 
} 
+1

Является ли это фактический код? Форматирование ужасное, и оно даже не компилируется. –

+0

@PhilippReichart - да, я исправил его форматирование. Но код действительно не компилируется. – Perception

+0

Извините, теперь мой код работает хорошо. Вы мне поможете с моим вопросом? – whiteTIGER

ответ

1

Вы просто должны это сделать -

Matrix mat = oldMatrix.eig(); 

Не забудьте включить Jama.Matrix.EigenvalueDecomposition.

Вы можете посмотреть here

+0

Вы были бы добры, чтобы помочь мне с моим кодом? – whiteTIGER

+0

@whiteTIGER - не будет делать домашнее задание ;-) Попробуйте сами. – JHS

+0

Я пытался это сделать, правильно? для (INT I = 0; <п; я ++) { \t \t \t для (Int J = 0, J whiteTIGER

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