2017-09-19 50 views
1

我有一個「循環」1000次迭代,其輸出是一個2 * 2矩陣。所以,我的問題是,「我怎麼能存儲所有迭代作爲對角線的輸出(或塊對角)矩陣?」當for循環的輸出是2 * 2矩陣時,將for循環的輸出存儲在(塊)對角矩陣中?

X_t=[0 0.0016 0 0 -0.0015 0;0 0.0005 0 0 -0.0010 0]; 
X=[0 2 0 0 -1 0;0 0.5 0 0 -0.01 0]; 

ar = linspace(1e-3,1e2,1000); 
w = 1i*ar; 

M = zeros(2*numel(w)); 

for k=1:numel(w) 

    P=[(10*exp(-w(k)))/(12*w(k)+1) (-8*exp(-3*w(k)))/(7*w(k)+1);  
     (5*exp(-8*w(k)))/(9*w(k)+1) (-17*exp(-4*w(k)))/(12*w(k)+1)]; 

    W=[1 0;1/w(k) 0;w(k)/(1+0.3*w(k)) 0;0 1;0 1/w(k);0 w(k)/(1+0.3*w(k))]; 

    Z=eye(2)+(X*W)*P; 
    Y=((1.4)^2)*eye(2); 
    Z_t=eye(2)+(X_t*W)*P; 

    index = 2*k + [-1 0]; 
    M(index, index)=(Z'*Z_t)-(Y'*Y); 

end 

回答

0

您應該確定要在每次迭代改變其索引:

index = 2*k + [-1 0]; 
M(index, index)=(Z'*Z_t)-(Y'*Y); 

,提高性能,應該預先分配輸出矩陣:

M = zeros(2*numel(w)); 

注意,它可能會更(內存)高效使用sparse矩陣。

你可以檢查你的矩陣建立正確使用spy命令,它以圖形方式顯示非零矩陣元素:

enter image description here enter image description here