Matlab: использование каждого элемента вектора-столбца для выполнения серии вычислений (итераций?) - PullRequest
0 голосов
/ 15 февраля 2012

theta1 = theta(:,1); // Это вектор столбца данных, извлеченных из матрицы 18x30 theta1: 18x1.

Затем отсюда мне нужно пройти каждый из 18 отдельных элементов по одному со следующими вычислениями:

nx =((cos(theta1(1))^2)/(1.5^2) + ((sin(theta1(1))^2)/(1.7^2)))^(-1/2);

Здесь я выбрал первый элемент, используя "theta1(1)", но в идеале я хотел бы как-то использовать цикл for, чтобы этот расчет можно было выполнить для всех 18 значений "theta1", что у меня есть, а затем произвести еще одну матрицу 18x1 "nx". Я пытался использовать цикл for, но не могу заставить его работать правильно.

Затем после этого я хочу использовать каждый из 18 элементов «nx» в другом вычислении, чтобы получить другую переменную:

d = (2*pi*(nx-1.5)*0.000018)/0.000000555;

Итак, я ищу какой-то общий алгоритм для цикла или любой другой подходящий метод, который позволил бы мне выполнить такой тип вычислений, когда я использую каждый элемент в массиве, подключаю его к формуле и создаю другой массив с ответ из расчета.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Это то, что вы ищете?

theta = rand(18,30);
theta1 = theta(:,1);
nx =(cos(theta1.^2)/(1.5.^2) + (sin(theta1.^2)/(1.7^2)).^(-1/2))
d = (2*pi*(nx-1.5)*0.000018)/0.000000555

Если вы используете . перед оператором ^, вектор будет квадратировать их поэлементно (то же самое работает с .*./).Посмотрите арифметические операторы

1 голос
/ 15 февраля 2012

Попробуйте использовать

nx =((cos(theta1(:)).^2)/(1.5^2) + ((sin(theta1(:)).^2)/(1.7^2))).^(-1/2);
d = (2*pi*(nx(:)-1.5)*0.000018)/0.000000555;
...