2017-04-02 7 views
1

Dans le cadre d'un code plus long, j'obtiens une quantité phi1 et phi2 (matrices de taille 128x128) qui sont les arguments d'une quantité complexe. Maintenant, je définis les quantités suivantes dans MATLAB:tan inverse dans matlab ne donnant pas de valeurs correctes

alpha=phi1-phi2; 
S1=cos(alpha); 
S2=sin(alpha); 
K=atan2(S2,S1); 

Maintenant, K devrait être égal à alpha. Par conséquent, la matrice B définie comme:

B=K-alpha; 

doit être zéro.Mais le résultat est différent. Bien que plusieurs éléments de B soient nuls, beaucoup d'entre eux ont la valeur 6.2832 (c'est-à-dire 2pi). Pourquoi cela pourrait-il se produire?

+0

En fait, phi1 et phi2 sont des angles évalués dans MATLAB. D'où leurs étendues se situent entre -pi et pi. quand j'évalue alpha la gamme des valeurs ne se trouve plus entre -pi et pi. Par conséquent, atan2 ne donne pas la valeur alpha exacte. Mais la chose est que je veux une valeur alpha exacte, car il y a une autre équation qui donne beta = phi1 + phi2. Et mon objectif principal est d'évaluer phi1 en dérivant alpha de S1 et S2 et l'équation bêta. Pour cela, je veux une valeur alpha exacte, telle qu'elle est. Mais peu importe ce que j'essaie, je ne suis pas capable de récupérer l'alpha exactement. Quelqu'un peut-il suggérer quelque chose? –

Répondre

2

La fonction atan2 fonctionne toujours returns values between -pi and pi. Ainsi, par exemple, pour alpha = 4 votre code

S1=cos(alpha); 
S2=sin(alpha); 
K=atan2(S2,S1) 

donne

K = 
    -2.2832 

qui est alpha mais déplacé (modulo 2*pi) à l'intervalle entre -pi et pi.

Cela ne devrait pas poser de problème, car deux angles qui diffèrent par 2*pi sont identiques. Ainsi, une solution possible est de comparer les angles en faisant la soustraction modulo 2*pi:

>> mod(alpha-K, 2*pi) 
ans = 
    0 

Notez également que, en raison de numerical rounding errors, vous ne devriez pas compter sur la différence modulo 2*pi étant 0 exactement. Au lieu de cela, comparez sa valeur absolue à une tolérance donnée.