我目前的代码如下。
我所拥有的是两组数据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
答案 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;