タンジェントのN乗の区間積分と数列

H31東京大学大学院工学研究科入試問1を題材に

公開日: 2022-02-04

Table of Contents

問題: H31東京大学大学院工学研究科入試問1

非負の整数$n$に対して$I_n$を以下のように定義します

\[I_n = \int_0^{\pi/4} \tan^n xdx\]
  1. $I_0$, $I_1$, $I_2$を計算せよ
  2. $n\geq 2$のとき、$I_n$を計算せよ

(1): $I_0$, $I_1$, $I_2$を計算せよ

\[\begin{align*} I_0 &= \int_0^{\pi/4} \tan^0 xdx\\ &= \int_0^{\pi/4} 1 dx\\ &= \frac{\pi}{4} \end{align*}\] \[\begin{align*} I_1 &= \int_0^{\pi/4} \tan xdx\\ &= \int_0^{\pi/4} \frac{\sin x}{\cos x}dx\\ &= [-\log |\cos x|]^{\pi/4}_0\\ &= \frac{1}{2}\log 2 \end{align*}\] \[\begin{align*} I_2 &= \int_0^{\pi/4} \tan^2 xdx\\ &= \int_0^{\pi/4} 1+\tan^2 xdx - \int_0^{\pi/4} 1 dx\\ &= [\tan x]_0^{\pi/4} - \frac{\pi}{4}\\ &= 1 - \frac{\pi}{4} \end{align*}\]

(2): $n\geq 2$のとき、$I_n$を計算せよ

\(\begin{align*} I_n &= \int_0^{\pi/4} \tan^n xdx\\ &= \int_0^{\pi/4} \tan^{n-2} x\tan^2 xdx\\ &= \int_0^{\pi/4} \tan^{n-2} x\frac{\sin^2 x}{\cos^2 x} xdx\\ &= \int_0^{\pi/4} \tan^{n-2} x\left(1 - \frac{1}{\cos^2 x}\right) xdx\\ &= \int_0^{\pi/4} \tan^{n-2} x dx- \int_0^{\pi/4} \frac{\tan^{n-2} x}{\cos^2 x}dx \quad\quad\tag{1.1} \end{align*}\)

(1.1)の第一項は$I_{n-2}$と一致することがわかります. 第二項については、$t = \tan x$と変数変換すると

\[\frac{dx}{dt}= \frac{1}{\cos^2 x}\]

に留意すると

\[\begin{align*} \int_0^{\pi/4} \frac{\tan^{n-2} x}{\cos^2 x}dx &= \int_0^{\pi/4} t^{n-2} dt\\ &= \frac{1}{n-1}[\tan^{n-2} x]_0^{\pi/4}\\ &= \frac{1}{n-1} \end{align*}\]

従って、

\[I_n = \frac{1}{n-1} - I_{n-2}\]

$I_{0}, I_{1}$については(1)ですでに求めてあるので、$n\geq 2$について, $k\in \mathbb N$としたとき

\[I_n = \begin{cases} (-1)^k\frac{\pi}{4} + \sum_{i=1}^k (-1)^{i+k}\frac{1}{2i - 1} & \text{ where } \ \ n = 2k\\[8pt] (-1)^k\frac{\log 2}{2} + \sum_{i=1}^k (-1)^{i}\frac{1}{2i} & \text{ where } \ \ n = 2k + 1 \end{cases}\]

Pythonでの確認方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import scipy.integrate as integrate
import numpy as np
import matplotlib.pyplot as plt

def simulate_integrate_tan(power):
    n_range = np.arange(0, power+1)
    func = np.vectorize(lambda n: integrate.quad(lambda x: np.tan(x)**n, 0, np.pi/4)[0])
    return func(n_range)

def simulate_integrate_tan_series(power):
    if power == 0:
        return np.pi/4
    elif power == 1:
        return np.log(2)/2
    else:
        return 1/(power - 1) - simulate_integrate_tan_series(power - 2)

def vectorize_simulate_integrate_tan_series(power):
    n_range = np.arange(0, power+1)
    func = np.vectorize(lambda n: simulate_integrate_tan_series(power =n))
    return func(n_range)


## simulation
### set parameter
POWER = 100

### simulation
naive_result = simulate_integrate_tan(power=POWER)
analysis_result = vectorize_simulate_integrate_tan_series(power=POWER)

np.allclose(naive_result, analysis_result)

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)