1

OctaveコードをJavaに移植しようとしています。私はatan2を試しているので、次の試みがあります

octave3.2:53> m1 = [1,2;3,4]
m1 =

   1   2
   3   4

octave3.2:54> m2=[5,6;7,8]
m2 =

   5   6
   7   8

octave3.2:55> atan2(m1,m2)
ans =

   0.19740   0.32175
   0.40489   0.46365

octave3.2:56> atan(1/5)
ans =  0.19740
octave3.2:57> atan(2/6)
ans =  0.32175
octave3.2:58> atan(3/7)
ans =  0.40489
octave3.2:59> atan(4/8)
ans =  0.46365

したがって、atan2は、最初の引数を2番目の引数で割った商にatanをセル単位で適用しているように見えます。私はこれをJavaでうまくやった。ただし、次のコードは奇妙なものを放ちます...

y
x
theta = atan2(y,x) 

そのために、次のようなトレースが得られます。

y =

  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000
  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000
  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000
  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000
  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000
   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000
   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000
   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000

x =

  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000

theta =

  -2.35619  -2.24554  -2.11122  -1.95130  -1.76819  -1.57080  -1.37340  -1.19029  -1.03038  -0.89606
  -2.46685  -2.35619  -2.21430  -2.03444  -1.81577  -1.57080  -1.32582  -1.10715  -0.92730  -0.78540
  -2.60117  -2.49809  -2.35619  -2.15880  -1.89255  -1.57080  -1.24905  -0.98279  -0.78540  -0.64350
  -2.76109  -2.67795  -2.55359  -2.35619  -2.03444  -1.57080  -1.10715  -0.78540  -0.58800  -0.46365
  -2.94420  -2.89661  -2.81984  -2.67795  -2.35619  -1.57080  -0.78540  -0.46365  -0.32175  -0.24498
   3.14159   3.14159   3.14159   3.14159   3.14159   0.00000   0.00000   0.00000   0.00000   0.00000
   2.94420   2.89661   2.81984   2.67795   2.35619   1.57080   0.78540   0.46365   0.32175   0.24498
   2.76109   2.67795   2.55359   2.35619   2.03444   1.57080   1.10715   0.78540   0.58800   0.46365
   2.60117   2.49809   2.35619   2.15880   1.89255   1.57080   1.24905   0.98279   0.78540   0.64350
   2.46685   2.35619   2.21430   2.03444   1.81577   1.57080   1.32582   1.10715   0.92730   0.78540

それは何ですか?シータの最初のセルは〜0.785398になるはずです。他のセルも間違っているようです。見逃したことはありますか?

4

2 に答える 2

0

自分で答えを見つけました。atan2単にatanセルごとに適用されるのではありません。オペランドの符号も重要です。

詳細については、http ://sunsite.univie.ac.at/textbooks/octave/octave_17.htmlを参照してください。

そして、atan2(私が行っているように)自分で実装する方法については、http://en.wikipedia.org/wiki/Atan2を参照してください。

于 2012-03-18T10:23:47.670 に答える
0

Atan2は、象限を考慮しているため、静かなatanではありません。

参照: http: //en.wikipedia.org/wiki/Atan2

あなたの最初のケースはatan(x/y) - Pi

于 2012-03-18T10:27:24.953 に答える