мой текущий код ниже.
У меня есть два набора данных phi и theta 18x30, и у меня есть цикл for, работающий от 1 до 30, которые являются 30 столбцами моих данных.Каждый из этих отдельных столбцов создаст для меня матрицу «B».Матрица «B» создается после прохождения 18 строк каждого столбца.
Проблема, с которой я столкнулся, заключается в том, что мне нужно умножить все полученные матрицы 'B' для каждой из 18 строк друг на друга, чтобы получить окончательную матрицу для каждого из 30 столбцов, поэтому яустановил A (:,:, i) = eye (2), чтобы моя первая матрица умножалась на A. Но я не хочу хранить A или B для каждого цикла, вместо этого я хочу, чтобы это было в первом циклеиз i моя матрица B умножит единичную матрицу A. Затем эта матрица A умножит следующую матрицу B ... с результатом каждого умножения, которое будет перенесено на следующую матрицу B, которая будет вычислена, поэтому умножения будут выполненыкак программа зацикливается.Вот почему у меня есть строка:
A(:,:,i) = A.*B;
, но, похоже, она не работает.Я получаю сообщение об ошибке, в котором говорится, что размеры должны совпадать.
В конце программы я хочу получить доступ к каждой из 30 матриц с помощью такой команды: A (:,:, 3), дляНапример, чтобы получить мою матрицу 2x2 для 3-го столбца.
Надеюсь, это было достаточно ясно!
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