arctanの公式



arctanは、私の数学研究でよく使います。多桁計算プログラムにもarctanをatan(n)という名でプログラム化してあります。普通の公式集には、

atan(x) = x - x^3/3 + x^5/5 - x^7/7 + x^9/9 - x^10/10 + . . . .


という展開式が載っています。xが大きいと収束しにくくなりますので、別の公式を使います。これも公式集に載っています。

atan(x) = pi/2 - 1/x + 1/3/x^3 - 1/5/x^5 + 1/7/x^7 - . . . .


とても綺麗な式で、しかも、便利です。しかし、xが1に近いところではひどく計算速度が鈍くなるので、困っていました。

そこで、いろいろ調べてみると、1の近傍では、atanが次の式になることが判りました。しかし、これだけではプログラム化することはできません。係数に法則がなければなりません。


atan(1+1/x) = pi/4 + 1/2/x - 1/4/x^2 + 1/12/x^3 - 0 -1/40/x^5 + 1/48/x^6 . . . .


はじめは特に法則があるようには見えませんでしたが、ある程度の大きさまで求めてみたところ、幸いにも係数がある法則のもとに並んでいることを発見しました。

そこで、その法則を説明しましょう。係数を並べて、数列a(r)を作ります。つまり、
atan(1+1/x) = pi/4 + a(1)/x + a(2)/x^2 + a(3)/x^3 + a(4)/x^4 + . . . . .
となります。

a(1)=1/2; a(2)=-1/4; a(3)=1/12; a(4)=0; a(5)=-1/40; a(6)=1/48; a(7)=-1/112;
a(8)=0; a(9)=1/288; a(10)=-1/320; a(11)=1/704; a(12)=0; a(13)=-1/1664; ..........

パソコンのおかげでどこまでも計算できます。係数はすべて有理数であることは間違いありません。ただ、そこに法則があるかどうかです。そこで、これらを2の累乗を基本に並べてみます。すると、以下のようになりました。

+2=+2^1*1
-4=-2^1*2
+12=+2^2*3
  0
-40=-2^3*5
+48=+2^3*6
-112=-2^4*7
  0
+288=+2^5*9
-320=-2^5*10
+704=+2^6*11
  0

途中に0が入り、符号の変わり方と、累乗の増え方が異なるので、並び方は単純ではありません。しかし、次の係数を予想することが出来るので、法則があることは間違いありません。次は-2^7*13となるはずです。はたして、-2^7*13=-1664 となり、計算結果と一致しました。

これをもとにしてプログラムを作ってみたところ、従来の計算式での結果とまったく一致しました。いくら精度を上げても一致します。これは証明問題ではないので、これで問題なく使うことが出来ます。これにより atan(x)計算がかなり高速化されます。これは大変便利ですよ。





arcsinの公式



arcsinの計算をasin(x)という名でプログラム化しています。この公式にも綺麗な係数が登場します。atan(x)ほど複雑ではないので、少し検討すると法則が見えてきます。

asin(x) = a(1)*x + a(2)*x^2 + a(3)*x^3 + a(4)*x^4 + . . . . . と a(r)を定めて、a(r)を計算します。その結果、次のような係数を得ます。


a(1)=1/6 , a(2)=3/40 , a(3)=15/56 , a(4)=105/3456 , a(5)=63/2816 , a(6)=231/13312 , . . .  以下略。

分母に2の倍数が目立つので、2で纏めてみると、

a(1)=1/(2*3) , a(2)=3/(2^3*5) , a(3)=15/(2^3*7) , a(4)=35/(2^7*9) , a(5)=63/(2^8*11) , a(6)=231/(2^10*13) , . . .  

分子に注目すると、こちらには奇数が目立つので、素因数分解して並べてみます。すると、ここに(2r-1)の数が必ず現れることが判ります。また、分母には (2r+1)があることに気が付きます。

a(1)=1/(2*3) , a(2)=3/(2^3*5) , a(3)=3*5/(2^3*7) , a(4)=5*7/(2^7*9) , a(5)=7*9/(2^8*11) , a(6)=21*11/(2^10*13) , . . .  

あとは、2の倍数が綺麗な法則で並ぶはずとの思いで、強引に 2*4*6*8*... と並べてみます。強引なやり方はときに非常に有効であることがあります。ここもそのひとつです。a(r)の2の倍数と一致します。また、分母の中であまった奇数を消せるように、分子も 3*5*7*9*... と並べてみます。すると、見事に全部消えてくれて、3*5*7*9/2*4*6*8*10*11 という数を得ます。これがa(5)です。a(6)も試しに並べてみると、3*5*..*11/2*....*12*13 となり、これもa(6)と一致します。a(7)=3*...*13/2*...*14*15 もうまくいきます。ですから、これが係数の法則であることは間違いありません。
jo10 の図
(^^)!!


というわけで、これでプログラムが可能となります。計算式は次のようなものです。

asin(x) = x + x^3/6 +3*x^5/40 + 5*x^7/112 + 35*x^9/1152 + .....

これを図示すると右図になります。


ただ、実際やってみると、x=0.999... となると計算速度が遅くなり、あまり便利でありません。そこで、ここでも x→1 となるときに成り立つ式を探したところ、次のような式を得ました。 v=√(2x) とします。

sin(1-x) = pi/2 - v - vx/12 -3*vx^2/160 -5*vx^3/896 - 35*v*x^4/18432 - . . .

しかし、よく見ると、何のことはない、pi/2-acos(x) と等しくなっています。考えてみると当たり前ですね。 (TT)






arccosの公式



arccos(x)もarcsinと似たようなやり方で見つけることが出来ます。arccos(x)をacos(x)という名でプログラム化することにします。その係数を acos(x) = a(1)*x + a(2)*x^2 + a(3)*x^3 + a(4)*x^4 + . . . . . となるように a(r)を定めます。このa(r)を計算すると次のようになります。


a(1)=1/12 , a(2)=3/160 , a(3)=5/896 , a(4)=35/18432 , a(5)=63/90112 , . . .  以下略。

これもasin(x)と似た係数になると予想して、分母を偶数、分子を奇数で並べてみます。するとasin(x)と同じように、分子に並ぶ奇数より大きい次の奇数が分母に現れます。また、残りの数はすべて 2^r の形になっています。これで法則が解明されました。

a(r) では、分子は 1,3,5,7,9 . . . (2r-1) と並びます。分母は 2,4,6,8, . . . 2r と並びます。分子に現れた最後の奇数に2をブラスした数が(2r+1)で、これを分母に付け加えます。あとは、2^r を分母に掛けると出来上がりです。

a(1)=1/2*3*2 , a(2)=1*3/2*4*5*2^2 , a(3)=1*3*5/2*4*6*7*2^3 , a(4)=1*3*5*7/2*4*6*8*9*2^4 , a(5)=1*3*5*7*9/2*4*6*8*10*11*2^5 , . . .  これを見ると、a(6)も、a(7)もすぐに計算できます。
jo12 の図

この結果、式全体は次のようなものになります。y=1-x, v=√y とすると、
acos(x) = v*√2 + v*y*√2/12 + 3*v*y^2/160 +5*v*y^3/896 + 35*v*y^4/18432 + ....

この式に基づいて計算したのが右図です。

x=-1まで計算可能で、acos(-1)=pi となります。ただし、全体に縦に波打っている形になるので、acos(x)の答えはいくつもあり、それぞれ + 2*pi の関係になっています。










表紙に戻る  前のページへ  次のページへ