2014-11-23 232 views
0

賦值爲:重置存儲在矩陣中的值,以使它們位於此範圍內[-pi,pi]。注意不要使用任何非標準的Matlab函數來執行此操作。在matlab中收斂值範圍[-pi,pi],不使用wraptopi

(當然是所有角度THETA + 2N * PI是相同的,對於任何整數n因此例如:1.5的角度* PI應被重置爲-0.5 * PI)

非標準matlab函數wraptopi這樣做(我認爲),但我不允許使用這個函數。 我有這種感覺,我可以使用模來做到這一點,但我不知道如何。

任何人都可以幫助我嗎?

在此先感謝

+0

模會工作。當你想換行到一個不以零[0 ... N)開始的範圍時,你可以添加一個偏移量,做模數運算,然後再次減去偏移量。 – 2014-11-23 20:11:39

+0

非常感謝!我快到了。然而,當我比較我的結果和wraptopi做什麼,我的價值觀是對avarage有點大...... 這是我做過什麼: %與基質d **偏移= MAX(最大啓動關閉( d(:,:))); ** %確定偏移:我走矩陣 ** D_with_offset = d +偏移的最大值; ** %添加偏移 ** D_mod = MOD( D_with_offset,(2 * PI)); ** %取所有值的模,與2PI ** D_back_within_range = D_mod-π; ** %消除失調再次 莫非小號omeone告訴我這是哪裏出錯? – rasa 2014-11-23 21:08:57

+0

你的偏移量應該是'pi',而不是矩陣的最大值。在最後減去相同的值。 – 2014-11-23 21:20:12

回答

3

要擴大@Ben沃伊特,你可以使用模式的操作是這樣的:

換到[0,2 * PI],你可以這樣做:

angle_rad = angle_rad - 2*pi*floor(angle_rad/(2*pi)); 

換到[-pi,+ PI],你會添加其他項

angle_rad = angle_rad - 2*pi*floor((angle_rad+pi)/(2*pi));