MATLAB - матричные комбинации - PullRequest
3 голосов
/ 27 февраля 2010

Я довольно новичок в MATLAB, и у меня возникают проблемы с поиском эффективного решения проблемы. Любая помощь будет принята с благодарностью!

У меня есть 2D-матрица, содержащая различные углы между линиями, которые выглядят как

            L1  L2 L3 L4 L5 L6
         L1  0  40 90 0  10 0 
         L2  40 0  0  5  40 20 
         L3  90 0  0  45 0  10 
         L4  0  5  45 0  10 15 
         L5  10 40 0  10 0  15 
         L6  0  20 10 15 15 0

Обратите внимание, что каждый соответствующий столбец / строка идентичны. Мне нужно найти все возможные комбинации, чтобы линии могли быть организованы в матрице. т.е. L1, L2, L3, L4, L5, L6, L1, L2, L3, L4, L6, L5, L1, L2, L3, L5, L6, L4 и т. д. Мне нужно сгенерировать матрицу для каждой комбинации, которая будет сравниваться со значениями шаблона позже.

Я пытался использовать

p = perms(1:6);
tp = angles( p, : );

чтобы просто поменять местами строки матрицы для каждой комбинации. Это работает хорошо, за исключением того, что только строки поменяются местами для каждой комбинации, когда столбец также необходимо поменять местами.

             L1 L2 L3 L4 L5 L6                 L1 L2 L3 L4 L6 L5
         L1  0  40 90 0  10 0              L1  0  40 90 0  0  10 
         L2  40 0  0  5  40 20             L2  40 0  0  5  20 40 
         L3  90 0  0  45 0  10  should be  L3  90 0  0  45 10 0 
         L4  0  5  45 0  10 15             L4  0  5  45 0  15 10
         L6  0  20 10 15 15 0              L6  0  20 10 15 0  15
         L5  10 40 0  10 0  15             L5  10 40 0  10 0  0

1 Ответ

3 голосов
/ 27 февраля 2010

Для перестановки num используйте tp = angles(p(num,:),p(num,:)), которая переставляет и строку, и столбец, чтобы дать для вашего примера перестановку [1 2 3 4 6 5]:

tp =

     0    40    90     0     0    10
    40     0     0     5    20    40
    90     0     0    45    10     0
     0     5    45     0    15    10
     0    20    10    15     0    15
    10    40     0    10    15     0

что, я думаю, тебе действительно нужно. Ваше «должно быть» больше не симметрично, что не может быть правильным.

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