2013-02-13 2 views
1

Я пытаюсь определить обратную матрицу с помощью сопряженного метода, т. Е. (Сначала вычислить кофактор матрицы, затем перенести эту матрицу и, наконец, , умножьте его на (1/детерминант) для обратного значения детерминанта) У меня есть методы, которые определяют транспонирование и определитель, однако я борюсь с матрицей кофактора -Ко фактор матрицы в Java (используется для определения обратной матрицы)

Ссылка, показывающая, как определяется обратное используя сопряженный метод вручную http://www.mathwords.com/i/inverse_of_a_matrix.htm Ссылка, показывающая, как кофактор рассчитывается вручную http://www.mathwords.com/c/cofactor_matrix.htm>

У меня есть метод, который вычисляет детерминант и транспонирование штраф, но я не могу получить метод кофактора, чтобы дать мне выход я требую

Выходного образца => 24 5 -4
24 5 -4
24 5 -4 но второй & третья строка должна отличаться, любые предложения? Благодаря! Вот метод, который я использую => Методы checkIfSquare и assigningSign работают отлично также

public static int[][] cofactor(int[][] matrix) { 
    int[][] cofactorMatrix = new int[matrix.length][matrix.length]; 

    for (int j = 0; j < matrix.length; j++) { 
     if (checkIfSquare(matrix)) { 
      for (int location = 0; location < matrix.length; location++) { 
       int reducedMatrix[][] = new int[matrix.length - 1][matrix.length - 1]; 

       for (int rows = 1; rows < matrix.length; rows++) { 
        for (int cols = 0; cols < matrix.length; cols++) { 
         if (cols > location) { 
          reducedMatrix[rows - 1][cols - 1] = matrix[rows][cols]; 
         } else if (cols < location) { 
          reducedMatrix[rows - 1][cols] = matrix[rows][cols]; 
         } 
        } 
       } 

       int sign = assigningSign(location); 
       cofactorMatrix[j][location] = determinantCalc(reducedMatrix) * sign; 
      } 
     } 
    } 
    return cofactorMatrix; 
} 

ответ

1

При вычислении reducedMatrix вы всегда пропускаем первую строку. Это работает для первой строки матрицы кофактора, но для строк ниже вам нужно пропустить строку j. Вот почему ваш вывод состоит из повторения первой строки.

Кстати, это ужасный способ вычисления инверсии матрицы. Я предполагаю, что это академическое упражнение, которое не предназначено для использования в серьезных программах.

0

Там нет необходимости заново изобретать колесо. Джама - хорошо написанный пакет. Maven хранилище

<dependency> 
     <groupId>Jama</groupId> 
     <artifactId>Jama</artifactId> 
     <version>1.0.2</version> 
    </dependency> 

    <repository>  
     <id>ebi-repo</id>  
     <name>The EBI internal repository</name>  
     <url>http://www.ebi.ac.uk/~maven/m2repo</url>  
     <releases>  
      <enabled>true</enabled>  
     </releases>  
     <snapshots>  
      <enabled>false</enabled>  
     </snapshots> 
    </repository>   

В качестве альтернативы, файл банка доступен на http://math.nist.gov/javanumerics/jama/#Package

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