2010-07-03 5 views
0

J'ai un problème très simple. Supposons que nous ayons le code suivant pour calculer la directivité de l'antenne isotrope.Matlab Matrix travail simple

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 

Ceci est bon code qui donne une valeur très proche de 1 qui doit être destinée à une antenne isotrope. C'est juste un contrôle de santé mentale de sorte que lorsque nous avons la matrice réelle de 72 * 37, nous pouvons confirmer que notre code est correct. Maintenant, le problème est que dans l'exemple ci-dessus, nous avons pris une matrice 72 * 37 et fait notre approximation intégrale et obtenu une valeur de directivité.

Ce dont j'ai besoin, c'est de calculer la directivité à chaque valeur de cellule de la matrice 72 * 37. Le résultat serait donc une autre matrice 72 * 37 montrant la valeur calculée de la directivité à chaque valeur de cellule (ce qui dans ce cas idéal est 1). Donc pour cet exemple, nous obtenons actuellement le résultat comme une seule valeur de directivité. Nous avons besoin de cette valeur à chaque cellule de la matrice U_iso. Cela aboutirait à une matrice 72 * 37 avec la même valeur. De plus, toutes les valeurs dans la matrice seraient identiques au résultat du code ci-dessus.

Alors pouvez-vous m'aider dans ce domaine. Je ne comprends pas comment déplacer la boucle à travers la matrice. Donc, il calcule pour chaque cellule.

En attente de réponse.

+0

Vous voulez dire que U_iso est une matrice de matrice ou quoi? – kennytm

+0

Non c'est juste une matrice supposée. Habituellement, c'est pour l'antenne parfaite. Mais comme je prends des mesures, l'antenne pratique aura des nombres différents dans sa matrice 72 * 37. C'est en fait le diagramme de rayonnement. Pour simplifier, l'U_iso ci-dessus est utilisé. – adeel

+0

Vous pouvez utiliser les opérateurs "elementwise" qui prennent des matrices de même taille et font quelque chose (disons, multiplication) sur chaque élément (i, j) de chaque matrice. – rwong

Répondre

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

Bonne réponse. vous pouvez aussi utiliser sum (omega_iso (:)) pour additionner rapidement tous les éléments indépendamment du nombre de dimensions du tableau – TDevlin

0

rwongs réponse est le meilleur en vectorisant ce que vous cherchez. sinon, pour répondre à votre question concernant le déplacement de la boucle. vous pouvez le faire:

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 

est vous somme (D_iso (:)) qui résumera tous les éléments et vous devriez obtenir ce que vous aviez avant.