2010-07-03 4 views
0

나는 아주 간단한 문제가 있습니다.Matlab 매트릭스 간단한 작업

등방성 안테나의 지향성을 계산할 때 다음과 같은 코드가 있다고 가정 해 보겠습니다.

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 매트릭스의 모든 셀 값에서 지향성을 계산하는 것입니다. 따라서 결과는 각 셀 값 (이상적인 경우 1)에서 계산 된 방향성 값을 보여주는 또 다른 72 * 37 행렬이됩니다. 따라서이 예에서 현재 지향성의 한 가지 값으로 결과를 얻고 있습니다. 이 값은 U_iso 행렬의 모든 셀에서 필요합니다. 이것은 동일한 값을 갖는 72 * 37 매트릭스를 생성합니다. 또한 행렬의 모든 값은 위 코드의 결과와 동일합니다.

그럼이 문제를 해결할 수 있습니까? 매트릭스 전체에 걸쳐 루프를 이동하는 방법을 이해할 수 없습니다. 그래서 그것은 각 셀을 계산합니다.

회신을 기다리고 있습니다.

+0

U_iso는 행렬의 행렬 또는 무엇을 의미합니까? – kennytm

+0

아니 그냥 가정 매트릭스. 일반적으로 완벽한 안테나입니다. 하지만 제가 측정을 할 때, 실제 안테나는 72 * 37 매트릭스에서 다른 숫자를 갖게 될 것입니다. 이것은 실제로 방사 패턴입니다. 더 간단하게하기 위해 위의 U_iso가 사용됩니다. – adeel

+0

같은 크기의 행렬을 취하고 각 행렬의 각 (i, j) 요소에 대해 무언가 (곱셈)를하는 "elementwise"연산자를 사용할 수 있습니다. – rwong

답변

0
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)); 
+0

좋은 답변입니다. 당신은 또한 sum (omega_iso (:))을 사용하여 배열이 갖는 차원의 수에 관계없이 모든 요소를 ​​빠르게 합할 수 있습니다 – TDevlin

0

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 (:))입니다. 당신은 이전에 가지고 있던 것을 얻어야합니다.