2017-04-02 6 views
1

より長いコードの一部として、複素数の引数である量phi1とphi2(サイズ128x128の行列)が得られます。今はMATLABで以下の量を定義する: matlabのtan inverseが正しい値を与えない

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

今、Kは、αに等しくなければなりません。したがって、行列Bは、次のように定義されます。

B=K-alpha; 

はゼロにする必要がありますが、結果は異なるものになります。 Bのいくつかの要素はゼロであるが、それらの多くは6.2832(すなわち2pi)の値を有する。 これがなぜ起こっているのでしょうか?

+0

実際、phi1とphi2はMATLABで角度評価されます。したがって、その範囲は-piとpiの間にある。アルファを評価するとき、値の範囲は-piとpiの間にはありません。したがって、atan2は正確なアルファ値を与えていません。しかし、事実は、ベータ= phi1 + phi2を与える別の式があるので、正確なアルファ値が欲しいということです。私の主な目的は、S1とS2とベータ方程式からアルファを導出してphi1を評価することです。そのためには、正確なアルファ値が必要です。しかし私が何を試しても、私は正確にアルファを取り出すことができません。誰でも何か提案してもらえますか? –

答えて

2

atan2は常にreturns values between -pi and piです。したがって、たとえば、alpha = 4あなたのコード

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

ため

alphaある
K = 
    -2.2832 

を与えるが、-pipi間の間隔に(モジュロ2*pi)に移動。

2*piが異なる2つの角度が実際に同じであるため、これは問題ではありません。だから、可能な解決策は、減算モジュロ2*piを行うことによって角度を比較することである。また、その

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

注意、numerical rounding errorsのために、あなたは正確に0された差分モジュロ2*piに頼るべきではありません。代わりに、その絶対値を所定の許容値と比較してください。

関連する問題