2015-12-08 98 views
2

考慮到我有每個nxn矩陣,建立這個矩陣的最有效方法是什麼?塊矩陣建築matlab

我想建立一個單元陣列,並通過迭代的,使用一個嵌套for循環但對於大ķ這將是非常低效..

enter image description here

+3

'out = blkdiag(m1,m2,m3,m4,...),'並從那裏閱讀'blkdiag'的文檔http://www.mathworks.com/help/matlab/ref/blkdiag .html – bla

+0

@bla但'k'各不相同,所以當你不知道'k'時,如何使用'blkdiag(m1,m2,m3,...)'這一行? – user3701257

+0

創建一個單元格數組並用k遍歷它也可以。關鍵是你做'A =零(k * n,k * n)',然後在適當的地方複製東西。如果你正在做'A = [A,blah];'這樣的東西,效率會很低 –

回答

1

實施例如何使用的任意數量的使用blkdiag輸入矩陣:

m = {[1,2; 3, 4]; [10, 11, 12; 13, 14, 15; 16, 17, 18]}; %cell array of matrices 
A = blkdiag(m{:}) 

然後,您可以通過複製矩陣進大矩陣A

觸摸起來10
for(i=1:k-1) 
    row_begin = 1 + (i-1)*n; 
    row_end = row_begin + n - 1; 
    col_begin = 1 + i*n; 
    col_end = col_begin + n - 1; 
    A(row_begin:row_end, col_begin:col_end) = B 
end 

等等

如果你的矩陣是非常大,但非常稀疏,你的算法保留稀疏,你可以考慮構建sparse matrix

+0

嗨,謝謝你的解決方案,但是你錯過了C_n第一列。什麼是最好的做法? – user3701257

+0

看看我如何做B,你應該能夠弄清楚 –