两个for循环(嵌套),计算矩阵Matlab

时间:2012-03-01 19:12:40

标签: matlab loops for-loop nested

我目前的代码如下。

我所拥有的是两组数据phi和theta 18x30和我有一个for循环运行从1到30这是我的数据的30列。这些单独的列中的每一列都将为我生成矩阵“B”。在经过每列的18行之后产生矩阵'B'。

我遇到的问题是我需要将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 个答案:

答案 0 :(得分: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;