Matlab Matrix простая работа - PullRequest
0 голосов
/ 03 июля 2010

У меня очень простая проблема.

Предположим, у нас есть следующий код для расчета направленности изотропной антенны.

ThDeg = 0:5:180; 
dtheta = 5*pi/180;
dphi = 5*pi/180;
Th = ThDeg*pi/180;

% the above are the angles at which the following matrix is acquired in practical case. In this case we take a matrix of all ones.

U_iso = ones(72, 37); % our matrix assumed

omega_iso = 0;
for i = 1:72
    for j=1:37
        omega_iso = omega_iso + U_iso(i,j)*sin(Th(j))*dphi*dtheta;
    end
end

D_iso = 4*pi/omega_iso

Это правильный код, который дает значение, очень близкое к 1, которое должно быть для изотропной антенны.Это просто проверка работоспособности, поэтому, когда у нас есть фактическая матрица 72 * 37, мы можем подтвердить, что наш код верен.

Теперь проблема в том, что в приведенном выше примере мы взяли матрицу 72 * 37 и выполнили наше интегральное приближение и получили ОДНО значение направленности.

Мне нужно вычислить направленность на каждомзначение ячейки матрицы 72 * 37.Таким образом, результатом будет другая матрица 72 * 37, показывающая вычисленное значение направленности для каждого значения ячейки (которое в этом идеальном случае равно 1).Таким образом, для этого примера в настоящее время мы получаем результат только как одно значение направленности.Нам нужно это значение в каждой ячейке матрицы U_iso.В результате получается матрица 72 * 37 с таким же значением в ней.Более того, все значения в матрице будут такими же, как результат приведенного выше кода.

Так что вы можете мне помочь в этом.Я не могу понять, как переместить цикл через матрицу.Таким образом, он рассчитывает для каждой ячейки.

Ожидание ответа.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2015

ответ rwongs является лучшим в векторизации того, что вы ищете.в противном случае, чтобы ответить на ваш вопрос о перемещении цикла.Вы можете сделать это:

ThDeg = 0:5:180; 
dtheta = 5*pi/180;
dphi = 5*pi/180;
Th = ThDeg*pi/180;

% the above are the angles at which the following matrix is acquired in practical case. In this case we take a matrix of all ones.

U_iso = ones(72, 37); % our matrix assumed

omega_iso = zeros(72,37;
for i = 1:72
    for j=1:37
        omega_iso(i,j) = omega_iso(i,j) + U_iso(i,j)*sin(Th(j))*dphi*dtheta;
    end
end

D_iso = 4.*pi./omega_iso

, если вы делаете сумму (D_iso (:)), которая будет суммировать все элементы, и вы должны получить то, что у вас было раньше.

0 голосов
/ 04 июля 2010
SinThJ = zeros(72, 37);

% For each of the 72 x 37 cell, compute sin(Th(j))

for j = 1:37
  SinThJ(:, j) = repmat( sin(Th(j)), 72, 1);
end

% Elementwise multiplication
% This omega_iso becomes a matrix

omega_iso = U_iso .* SinThJ * dphi * dtheta;

% This is the integration of the matrix

omega_iso_sum = sum(sum(omega_iso));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...