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

两个用于循环(嵌套),计算矩阵Matlab,matlab,loops,for-loop,nested,Matlab,Loops,For Loop,Nested,我现在的代码如下 我有两组数据φ和θ,都是18x30,我有一个for循环,从1到30,这是我的数据的30列。每一列都会为我生成一个矩阵“B”。矩阵“B”在遍历每列的18行之后生成 我的问题是,我需要将18行中每一行的所有结果“B”矩阵相乘,以便为30列中的每一列获得最终矩阵,这就是为什么我设置了a(:,:,I)=眼(2),以便我的第一个矩阵将乘以a。但我不想为每个循环存储a或B,相反,我想要的是,在I的第一个循环中,我的矩阵B将与单位矩阵A相乘。然后,矩阵A将与下一个矩阵B相乘……每次相乘的结果

我现在的代码如下

我有两组数据φ和θ,都是18x30,我有一个for循环,从1到30,这是我的数据的30列。每一列都会为我生成一个矩阵“B”。矩阵“B”在遍历每列的18行之后生成

我的问题是,我需要将18行中每一行的所有结果“B”矩阵相乘,以便为30列中的每一列获得最终矩阵,这就是为什么我设置了a(:,:,I)=眼(2),以便我的第一个矩阵将乘以a。但我不想为每个循环存储a或B,相反,我想要的是,在I的第一个循环中,我的矩阵B将与单位矩阵A相乘。然后,矩阵A将与下一个矩阵B相乘……每次相乘的结果将被带入下一个要计算的矩阵B,因此相乘将作为程序循环进行。这就是为什么我有这样一句话:

A(:,:,i) = A.*B;
但它似乎不起作用。我收到一条错误消息,说尺寸必须匹配

在程序结束时,我希望能够使用如下命令访问30个矩阵中的每一个: 例如,使用(:,:,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

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);

然后像这样把它放在最后

results(:,:,i) = A;

您好,谢谢您的回复,但我收到一条错误消息:尝试引用该行代码的非结构数组字段。我只需要一个二维矩阵,但我引入三维矩阵的唯一原因是能够访问我所有的30个矩阵;我收到一条错误消息说:索引矩阵引用不正确。现在它已经工作了。我刚刚犯了一个键入错误。但是我没有得到想要的结果,我希望我可以使用(:,:,1…30)调用30个矩阵,但是我每次都得到相同的矩阵,看起来很奇怪。@Awa786:对不起,我没有注意到你有两个循环。它应该是
A(:,:,i)=A(:,:,i)*B。我现在还有最后一个问题:我的30个矩阵中的每一个都需要乘以一个矩阵L=[0;1]是否可以将其放入a(:,:,I)=a(:,:,I)*B;在什么地方?如果我这样做呢:M(:,:,I)=A(:,:,I)*L
results(:,:,i) = A;