2017-04-02 144 views
1

作爲較長代碼的一部分,我得到一個數量爲phi1和phi2(大小爲128x128的矩陣),它們是複數量的參數。現在我在MATLAB中定義下列量:matlab中的反正切不給出正確的值

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

現在,K應該等於alpha。因此,矩陣B的定義如下:

B=K-alpha; 

應該是零。但結果會出現不同。雖然B的幾個元素是零,但它們中的很多元素的值都是6.2832(即2pi)。 爲什麼會發生這種情況?

+0

其實,phi1和phi2是在MATLAB中評估的角度。因此它們的範圍在-pi和pi之間。當我評估alpha時,值的範圍不在-pi和pi之間。因此,atan2沒有給出確切的alpha值。但問題是我需要確切的阿爾法值,因爲還有另一個方程給出beta = phi1 + phi2。我的主要目標是通過從S1和S2以及β方程推導出α來評估phi1。爲此,我需要確切的阿爾法值,因爲它是。但無論我嘗試什麼,我都無法準確檢索alpha。任何人都可以請提出建議嗎 –

回答

2

atan2功能始終returns values between -pi and pi。因此,例如,對於alpha = 4代碼

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

K = 
    -2.2832 

這是alpha但移動(模2*pi)在區間-pipi之間。

這不應該是一個問題,因爲,通過2*pi不同的兩個角度實際上是相同的。因此,一個可能的解決方案是通過做減法模2*pi的角度比較:

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

還要注意的是,由於numerical rounding errors,你不應該依賴於差異模2*pi確切地說是0。相反,將其絕對值與給定的容差進行比較。