2016-02-29 5 views
4

У меня есть матрица 2x2, которую я хочу умножить на 10 раз, сохраняя результат после каждого умножения. Это можно легко сделать с помощью цикла for, но я бы хотел процитировать его, исключив цикл for. Мой подход состоял в том, чтобы иметь мою 2x2-матрицу a и поднять ее до вектора b с элементами 1:10. Ответ должен быть 2x2x10 матрицей, которая реплицируется набравКак поднять матрицу к вектору степеней в matlab без цикла?

a^b(1) 
a^b(2) 
. 
. 
. 
a^b(10) 

Для уточнения я не делаю этот элемент мудрый мне нужно реально матричное умножение, и предпочитаю не использовать for петли. Спасибо за любую помощь, которую вы можете мне дать.

+5

Вы, вероятно, должны зациклиться на этом. Плюс, матричный цикл 2x2 определенно не о чем беспокоиться. «Ранняя оптимизация - это корень всего зла»! –

+0

Ответ на этот вопрос ** s ** на [этот вопрос] (http://stackoverflow.com/q/35034584/3372061) может быть применим к вашей проблеме. Кроме того, вы можете получить другие идеи из [здесь] (https://en.wikipedia.org/wiki/State-transition_matrix). Наконец, есть [это представление FEX] (http://www.mathworks.com/matlabcentral/fileexchange/25977-mtimesx-fast-matrix-multiply-with-multi-dimensional-support) .... –

+0

Это может быть только сделано с петлей, но это очень быстро. Не скидывайте петли только потому, что вам сказали, что они вообще ужасны. Петли могут быть довольно быстрыми, если вы ** знаете **, как правильно их использовать. См. Сообщение, связанное как дубликат, для получения более подробной информации. – rayryeng

ответ

2

вот код для вас. Я использую cellfun, чтобы сделать это, и у меня есть комментарии после каждой строки кода. Он может вычислять и хранить из fisrt-n-го порядка самомножения произвольной матрицы m. Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

function m_powerCell = power_store(m, n) %m is your input matrix, n is the highest power you want to reach 

    n_mat = [1:n]; %set a vector for indexing each power result in cell 

    n_cell = mat2cell(n_mat,1,ones(1,n)); %set a cell for each of the power 

    m_powerCell = cellfun(@(x)power(m, x), n_cell, 'uni', 0); %compute the power of the matrix 

end 

%this code will return a cell to you, each element is a matrix, you can 
%read each of the matrix by m_powerCell{x}, x represents the xth order 
+0

Спасибо! Это именно то, что я искал. У меня было ощущение, что это можно сделать через ячейки и cellfun, но я все еще довольно новичок в использовании ячеек. –

+0

Часть n_cell - это то, чего мне не хватало, я пытался использовать вектор мощности прямо в cellfun. –

+0

на месте только для вашего имени пользователя. Ответ тоже хорош. –

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