fortran66のブログ

fortran について書きます。

【メモ帳】積分2

C6.1 \int_0^{\pi\over2} \cos^{-1}\left( {1\over1+2\cos x} \right)  dx=\zeta(2)

I=\int_0^{\pi\over2} \arccos \left( {1\over1+2\cos x} \right)  dx

ここで  \cos2x=2\cos^2x-1=2u^2-1, u=\cos x より、
\arccos(2u^2-1)=\arccos(\cos2x) = 2x = 2\arccos(u) なので、
\alpha=2\theta^2-1 とすると、\theta=\sqrt{\alpha\over 2} すなわち \arccos(\alpha)=2\arccos\sqrt{1+\alpha\over2} となる。

これより

\begin{align}
\alpha&=\arccos\left({\cos x\over1+2\cos x}\right)\\
          &=2\arccos\left(\sqrt{1+\cos x\over1+2\cos x}\right)\\
&=2\arctan\left(\sqrt{\cos x\over1+\cos x}\right)\\
\end{align}
が得られる。ここで最後の式はピタゴラスの定理三角関数の定義による。

 
\begin{align}
I&=2\int_0^{\pi\over2}\arctan\left( \sqrt{\cos x\over 1+\cos x}\right) dx\\
&=4\int_0^{\pi\over4}\arctan\left( \sqrt{\cos2y\over1+\cos2y} \right)dy, \,\,(x=2y)\\
&=4\int_0^{\pi\over4}\arctan\left( \sqrt{1-2\sin^2y\over2\cos^2y} \right)dy, \,\,(倍角の公式)\\
\end{align}

ここで {1\over b}\arctan b =\int_0^1{1\over1+b^2t^2}dt より、
 
\begin{align}
I&=4\int_0^{\pi\over4}\int_0^1\sqrt{1-2\sin^2y\over2\cos^2y} {1\over 1+\left({1-2\sin^2y\over2\cos^2y}\right)t^2} dt dy\\
&=4\int_0^{\pi\over4}\int_0^1{\sqrt2\sqrt{1-2\sin^2y}\,\cos y\over (2+t^2)-2(1+t^2)\sin^2y} dt dy\\
&=4\int_0^{\pi\over2}\int_0^1{\sqrt{1-\sin^2w}\,\cos w\over (2+t^2)-(1+t^2)\sin^2w} dt dw, \,\,(\sqrt2\sin y=\sin w )\\
&=4\int_0^{\pi\over2}\int_0^1{\cos w\cos w\over (2+t^2)-(1+t^2)(1-\cos^2w)} dt dw\\
&=4\int_0^{\pi\over2}\int_0^1{\cos^2w\over 1+(1+t^2)\cos^2w} dt dw\\
&=4\int_0^\infty\int_0^1{{1\over 1+s^2}\over 1+(1+t^2){1\over1+s^2}}{1\over1+s^2} dt ds, \,\,(s=\tan w )\\
&=4\int_0^\infty\int_0^1{1\over (1+s^2)(2+t^2+s^2)} dt ds\\
&=4\int_0^\infty\int_0^1{1\over(1+t^2)(1+s^2)}-{1\over(1+t^2)(2+t^2+s^2)}dtds, \,\, (部分分数に展開)\\
&=4\left({\pi^2\over8}-{\pi\over2}\int_0^1{1\over(1+t^2)\sqrt{2+t^2}} \right) , \,\, ( s について積分ののち t について積分)\\
&=4\left({\pi^2\over8}-{\pi\over2}{\pi\over6} \right), \,\, (昨日の結果から)\\
&={\pi^2\over6}\\
\end{align}

数値計算 台形公式+Richardson 補外

実行結果
   1.64492430955605        1.64490909118690        1.64486343607944
   1.64493406684823
続行するには何かキーを押してください . . .

収束が悪い。

プログラム
module m_mod
    implicit none
    integer, parameter :: kd = kind(0.0d0)
    real(kd), parameter :: pi = 4 * atan(1.0_kd)
contains
    pure real(kd) function f(x)
        real(kd), intent(in) :: x
        f = acos(1.0_kd / (1.0_kd + 2.0_kd * cos(x)))
    end function f
    
    pure real(kd) function trapez(func, x0, x1, n) result(s)
        procedure(f) :: func
        real(kd), intent(in) :: x0, x1
        integer , intent(in) :: n
        real(kd) :: h, y(0:n)
        integer :: i
        h = (x1 - x0) / n
        forall(i = 0:n) y(i) = func(x0 + i * h)
        s = h * ( y(0) / 2 + sum(y(1:n-1)) + y(n) / 2 )
    end function trapez
end module m_mod

program test
    use m_mod
    implicit none
    integer, parameter :: n = 2**9
    real(kd) :: s0, s1, x0, x1
    integer :: i
    x0 = 0.0_kd 
    x1 = pi / 2.0_kd - epsilon(x1) 
    s0 = trapez(f, x0, x1, n * 2)
    s1 = trapez(f, x0, x1, n)
    print *, (4 * s0 - s1) / 3, s0, s1, pi**2 / 6.0_kd
end program test