2019年12月22日日曜日

学習環境

問題

の解答がブログ、toyoのメモ帳解答記事に載ってたけど、それは指数関数、複素数、留数計算を使っていたから、せっかくだからそれらを必要としない、三角関数の微積分のみを知っていれば求めることができる証明を書いてみた。

sin 2 n x dx = sin x sin 2 n - 1 x dx = - cos x sin 2 n - 1 x + 2 n - 1 cos x cos x sin 2 n - 2 x dx = - cos x sin 2 n - 1 x + 2 n - 1 cos 2 x sin 2 n - 2 x dx = - cos x sin 2 n - 1 x + 2 n - 1 1 - sin 2 x sin 2 n - 2 x dx = - cos x sin 2 n - 1 x + 2 n - 1 sin 2 n - 2 x - sin 2 n x dx = - cos x sin 2 n - 1 x + 2 n - 1 sin 2 n - 2 x dx - 2 n - 1 sin 2 n x dx = - cos x sin 2 n - 1 x + 2 n - 1 sin 2 n - 1 x dx - 2 n - 1 sin 2 n x dx

よって、

2 n - 1 + 1 sin 2 n x dx = - cos x sin 2 n - 1 x + 2 n - 1 sin 2 n - 1 x dx 2 n sin 2 n x dx = - cos x sin 2 n - 1 x + 2 n - 1 sin 2 n - 1 x dx sin 2 n x dx = - 1 2 n cos x sin 2 n - 1 x + 2 n - 1 2 n sin 2 n - 1 x dx

となり、漸化式によって表すことができる。

n = 0

の場合。

- π π 1 dx = 2 π

続けて、

- π π sin 2 x dx = 1 2 · 2 π = π - π π sin 4 x dx = 3 4 π - π π sin 6 x dx = 5 6 · 3 4 π = 5 8 π - π π sin 8 x dx = 7 8 · 5 8 π = 35 64 π - π π sin 10 x dx = 9 10 · 35 64 π = 81 128 π

また、

3 4 = 3 2 3 · 2 2 2 = 1 2 2 · 2 - 1 · 4 · 3 2 · 1 = 1 2 2 · 2 - 1 4 3 5 8 = 5 2 5 · 2 2 = 1 2 5 · 6 · 5 · 4 6 = 1 2 2 · 3 - 1 · 6 3 1 = 1 2 2 · 1 - 1 2 1 2 = 1 2 2 · 0 - 1 0 0 = 2

そこで、

- π π sin 2 n x dx = - 1 2 n cos x sin 2 n - 1 x - π π + 2 n - 1 2 n - π x sin 2 n - 1 x dx = 2 n - 1 2 n · 1 2 2 n - 1 - 1 · 2 n - 1 n - 1 π = 2 2 n - 1 2 2 n - 1 · 2 n - 1 ! n ! 2 n - 1 - n - 1 ! π = 2 2 2 n - 1 · 2 n - 1 ! n ! n - 1 ! π = 1 2 2 n - 1 · 2 n n · 2 n - 1 ! n ! n - 1 ! π = 1 2 2 n - 1 · 2 n ! n ! n ! π = 1 2 2 n - 1 · 2 n ! n ! 2 n - n ! π = 1 2 2 n - 1 · 2 n n π

よって、帰納法によりすべての自然数に対して 成り立つ。

(証明終)

ただこの証明方法だと、帰納法により証明する一般の場合を求めるのに、かなりの勘が必要かも。

一応、Pythonで確認。

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, sin, Integral, pi, factorial, plot


def comb(a, b):
    return factorial(a) / (factorial(b) * factorial(a - b))


n = symbols('n', integer=True, nonnegative=True)
x = symbols('x')
f = sin(x) ** (2 * n)
I = Integral(f, (x, -pi, pi))


class MyTestCase(TestCase):
    def test(self):
        for n0 in range(10):
            self.assertAlmostEqual(I.subs({n: n0}).doit(),
                                   pi / (2 ** (2 * n0 - 1)) * comb(2 * n0, n0))


p = plot(*[f.subs({n: n0}) for n0 in range(10)],
         (x, -5, 5),
         ylim=(-5, 5),
         show=False,
         legend=True)
colors = ['red', 'green', 'blue', 'brown', 'orange',
          'purple', 'pink', 'gray', 'skyblue', 'yellow']

for o, color in zip(p, colors):
    o.line_color = color

p.show()
p.save('sample.png')

if __name__ == '__main__':
    main()

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./sample.py -v
test (__main__.MyTestCase) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.393s

OK
%

0 コメント:

コメントを投稿