我希望以兩種方式擴展矩陣,但我無法弄清楚它的代碼; 我不尋找確切的代碼,但只是一個指向哪裏看文學。 以下問題涉及量子力學中換向器方程的線性化,我從物理學的角度瞭解理論,但我不知道在編程世界中我的問題的名稱。將矩陣擴展爲塊矩陣 - 索引問題
我有矩陣A是NxN矩陣,對於這個例子,讓N = 3;所以A是:
A=[a11 a12 a13
a21 a22 a23
a31 a32 a33]
我想做一個矩陣B是N^2xN^2大小。 B具有方框形式:
B=[A11 A12 A13
A21 A22 A23
A31 A32 A33]
A11=[a11 0 0
0 a11 0 ...
0 0 a11]
在B中的每個塊元件是NxN矩陣和每個塊是由屬性A11 = A11 *眼(3,3),等等(所以(B(I,J)連接的= A(I,J)*眼(3,3)))。
我的問題是,我不知道如何構建這樣一個循環,從A的每個元素的溫度3×3矩陣很容易,但我不知道如何在B堆棧這些塊(如何索引位置在B中)。
另一個矩陣我想形式也可爲N^2×N個^ 2矩陣簡單得多:
C=[A 0 0
0 A 0
0 0 A]
它是塊對角矩陣做出來A.我想我能設法找到代碼這個(matlab中有blkdiag函數)。
我想在C++和matlab中尋求解決方案。 問題是如何將塊堆棧成N^2xN^2矩陣以及我需要使用多少個循環。 我想要最好的計算方法。
我的想法是做這樣的事情:
for i=1:N
for j=1:N
for k=1:N
B(i*N+j-N,j+k*N-N)=A(i,k);
C(i*N+j-N,k+i*N-N)=A(k,j);
end
end
end
這工作完全(????在C++中這將是不-N在B(,)和C(,)分度)),但有可能用2 for循環做到這一點?
這是驚人的,非常非常感謝,在理論複習有克羅內克的提但我真的不明白這是什麼意思(這篇論文只是給出了公式,沒有太多的解釋)。 我假設在C++中存在類似的函數(我必須在C++中執行此操作),我將在明天查看庫。 非常感謝。 –
克羅內克產品是線性代數中非常強大的工具。我敢打賭,有許多庫內置了克羅內克函數。 – DomDev
@AleksandarDemić這篇文章可能是有趣的:http://stackoverflow.com/questions/4938887/efficient-computation-of-kronecker-products-in-c – rayryeng