我目前的代碼如下。兩個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
您好,感謝您的答覆結束,但我得到的錯誤消息:試圖引用非結構陣列的字段爲該線路的代碼。我只需要一個2D矩陣,但是將第三維引入的唯一原因是能夠訪問我所有的30個矩陣。 – Awa786 2012-03-01 19:33:20
哎呀抱歉,現在用這個A運行它(:,:,i + 1)= A(:,:,i)* B;並且我收到一條錯誤消息:不正確的索引矩陣參考 – Awa786 2012-03-01 19:38:32
現在它工作了,我剛剛犯了一個打字錯誤。但我沒有得到期望的結果,我希望能夠使用A(:,...,1 ... 30)調用30個矩陣,但是每次都得到相同的矩陣,看起來很奇怪.. – Awa786 2012-03-01 19:51:20