2012-03-01 843 views
0

我目前的代碼如下。兩個for循環(嵌套),計算矩陣Matlab

我所擁有的是兩套數據phi和theta都是18x30,我有一個從1到30的運行循環,這是我的數據的30列。這些單獨的列中的每一列都會爲我生成一個矩陣「B」。矩陣'B'在經過每列的18行之後產生。

我遇到的問題是,我需要將18行中的每一行的所有「B」矩陣相乘,以便爲30列中的每列獲得最終矩陣,這就是爲什麼我設置了A(:,:,i)= eye(2),這樣我的第一個矩陣將乘以A.但我不想爲每個循環存儲A或B,而是我想要的是在第一個循環我的矩陣B將乘以單位矩陣A.然後,矩陣A將乘以下一個矩陣B ...,每個乘法的結果被傳送到將要計算的下一個矩陣B,所以乘法將作爲程序循環。這就是爲什麼我有這條線:

A(:,:,i) = A.*B; 

但它似乎並沒有工作。我收到一條錯誤消息,說明尺寸必須匹配。

在程序結束時,我希望能夠使用如下命令訪問30個矩陣中的每一個,例如: A(:,:,3),例如,爲第3列獲得我的2x2矩陣。

希望已經夠清楚了!

theta = dlmread('theta.dat'); 
phi = dlmread('phi.dat'); 

ne = 1.7; 
no = 1.5; 
d = 0.000001; 
w = 0.000000555; 

for i = 1:30 
     A(:,:,i) = eye(2); 

for j = 1:18  

    nx =((cos(theta(j,i)).^2)/(no^2) + ((sin(theta(j,i)).^2)/(ne^2))).^(-1/2); 
    D = (2*pi*(nx-no)*d)/w; 

    x = ((cos(phi(j,i))).^2).*exp((-1i.*D)/2) + ((sin(phi(j,i))).^2).*exp((1i.*D)/2); 
    y = 1i*(sin(D/2)).*sin(2*phi(j,i)); 
    z = ((cos(phi(j,i))).^2).*exp((1i.*D/2) + ((sin(phi(j,i))).^2).*exp((-1i.*D)/2)); 

    B = [x y;y z]; 
    A(:,:,i) = A.*B; 

end 

end 

回答

1

B是2x2矩陣。對於A.*B的工作,A也必須是2x2。但您的程序中的A是三維的。

從您的問題描述,我想你想

A(:,:,i) = A(:,:,i)*B; % Edited now that I see this happens 18 times on the same i 

(請注意,我也取代逐元素乘法.*與矩陣相乘*,因爲這是它聽起來像你想要的。)


但我建議

A = eye(2); 

A = A*B; 

,並將其存儲在像

results(:,:,i) = A; 
+0

您好,感謝您的答覆結束,但我得到的錯誤消息:試圖引用非結構陣列的字段爲該線路的代碼。我只需要一個2D矩陣,但是將第三維引入的唯一原因是能夠訪問我所有的30個矩陣。 – Awa786 2012-03-01 19:33:20

+0

哎呀抱歉,現在用這個A運行它(:,:,i + 1)= A(:,:,i)* B;並且我收到一條錯誤消息:不正確的索引矩陣參考 – Awa786 2012-03-01 19:38:32

+0

現在它工作了,我剛剛犯了一個打字錯誤。但我沒有得到期望的結果,我希望能夠使用A(:,...,1 ... 30)調用30個矩陣,但是每次都得到相同的矩陣,看起來很奇怪.. – Awa786 2012-03-01 19:51:20