我目前的代码如下。两个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