Преобразование «меток» матриц в матрицы в Matlab - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь написать короткий код Matlab для выполнения определенной математической функции. Код генерирует вектор H, который имеет записи 1, 2 или 3 (и размер зависит от других факторов). (На мой взгляд) числа 1, 2 и 3 соответствуют трем конкретным матрицам. После того, как моя программа вычислила H, я бы хотел, чтобы она могла умножить вместе все матрицы, представленные ее записями. Чтобы уточнить, если H = [1 2 3 2], я бы хотел, чтобы мой код вычислял A * B * C * B. Какой самый простой способ сделать это? Я думал о создании вектора с записями, которые являются матрицами, и использовании функции, которая дает произведение записей вектора, но я не мог заставить это работать (и не знаю, может ли это работать - я очень новый для Matlab).

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

@ zuloos ответ может быть проблематичным, если размеры матриц не одинаковы - особенно если количество строк отличается. Должно работать, если вы поместите матрицы в ячейки.

 matrices = {A,B,C,D};

 result = matrices{H(1)};
 for i=2:numel(H)
   result = result * matrices{H(i)};
 end
0 голосов
/ 15 декабря 2011

поместите все свои матрицы в другой матрикс, тогда вы можете использовать значения H в качестве ключа для выбора правильной матрицы matices = [A, B, C, D].Затем вы бы пошли через H один за другим и умножили его на результат последней операции.Вы начнете с диагональной матрицы того же размера, что и другие матрицы, и умножите ее в каждом цикле цикла на матрицу в matrices, что соответствует значению H

matrices = [A, B, C, D]
// d is dimension of your matrices (i guess they are square)
erg = diag(d)
for i=length(H):1
   // supposed your matices are 2d
   erg = matrices(H(i),:,:)*init
end

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

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