ошибка построения Java симметричной матрицы - PullRequest
0 голосов
/ 30 мая 2018
    c1  c2  C3  C4                          c1  c2  C3  C4
 R1 1   0   0   0                        R1 1+1 -1  0   0
 R2 0   0   0   0                        R2 -1  1   0   0
 R3 0   0   0   0                        R3 0   0   0   0
 R4 0   0   0   0                        R4 0   0   0   0


    c1  c2  C3  C4                       c1 c2  C3  C4
R1  2   -1  0   0                 R1     2  -1  0   0
R2  -1  1+1 -1  0                 R2    -1  2   -1  0
R3  0   -1  1   0                 R3    0   -1  1+1 -1
R4  0   0   0   0                 R4    0   0   -1  1


    c1  c2  C3  C4
 R1 2   -1  0   0
R2  -1  2   -1  0
R3  0   -1  2   -1
R4  0   0   -1  1

Итак, это моя проблема. Мне нужно шаг за шагом генерировать такую ​​матрицу.Шаги показаны здесь.После поиска в Google я узнал, что этот вид матрицы называется симметричной матрицей.Матрица и транспонирование этой матрицы одинаковы.Я пытаюсь написать некоторый код для реализации этого.

 import Jama.Matrix;

public class mutest {
public static void main(String args[]){
    Matrix omega=new Matrix(5,5);
    Matrix omega1=new Matrix(5,5);
    for(int i=0;i<=4;i++){
        for(int j=0;j<4;j++) {

                if (i == j) {
                    omega1.set(i, j, 1);//Here I set the value 1 if i=j
                } else {
                    omega1.set(i, j, -1);//Here I set the value -1 if i not equal j
                }

        }


        omega=omega.plus(omega1);
        omega.print(9,6);


        }

    }


}

Но я не получаю желаемого результата: я получил

 5.000000  -5.000000  -5.000000  -5.000000   0.000000
-4.000000   4.000000  -4.000000  -4.000000   0.000000
-3.000000  -3.000000   3.000000  -3.000000   0.000000
-2.000000  -2.000000  -2.000000   2.000000   0.000000
-1.000000  -1.000000  -1.000000  -1.000000   0.000000

Это не симметричная матрица.Может кто-нибудь сказать мне, что я должен изменить в своем блоке кода.Я почти достиг цели.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018
omega=omega.plus(omega1);

находится не в том месте;Вы добавляете частично обновленную копию omega1 в omega каждый раз, когда завершаете строку.Таким образом, первый ряд добавляется 5 раз, второй - 4 раза ... Объедините это с тем, что последний столбец не обновлялся, и это объясняет ваш результат.

0 голосов
/ 31 мая 2018

Не ответ, а просто разъяснение.Извините, но ваша логика не завершена.Рассмотрим первый ход, i = 0;а затем j будет перебирать от 0 до 3. Таким образом, вы, согласно вашему коду, задаете:

R1C1 = 1; 
R1C2 = -1;
R1C3 = -1;
R1C4 = -1; 

Что если

 if (i == j) {
        omega1.set(i, j, 1);//Here I set the value 1 if i=j
        if(i < omega1.length ) { //Whatever the method is to find the length, in this example 5.  
          omega1.set(i+1, j , -1);
          omega1.set(i, j+1 , -1);
           break; //from the second loop.
        }
      } 

Просто быстрое решение с учетом вашего подхода, вы всегда можете оптимизировать его или сделать его лучше.

Примечание: никогда не использовал Jama.Matrix, поэтому не знаю функций, но я считаю, что в основном это двумерный массив с добавленными математическими функциями.Боже, я звучу глупо !!

0 голосов
/ 31 мая 2018

Похоже, у вас ошибка "по одному".

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

i включает в себя 4, но j повторяется только до 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...