はじめに
ある積分の極限を求める場合、高校数学では一般的に目的となる式を上下で挟み、はさみうちの原理を用いて極限を求めることが一般的である。数学的な厳密性を欠いていえば、目的となる式を単純な関数で近似してそれの近似値を求める。今回は、目的となる式つまり定積分をモンテカルロ法によって数値解析して、それの極限を求めることで、はさみうちの原理によって求めた極限値と数値解析の値を比較する。
問題
以下の式で表される、$I_n$を定義する。
I_n=\int^{\sqrt{3}}_0 \frac{1}{1+x^n}dx
このもとで、以下の値を求める。
\lim_{n\to \infty} I_n
数学的解法
$f(x)=\frac{1}{1+x^n}$とすると、
(1)$0<x<1$のときと(2)$1<x<\sqrt{3}$のときで、$f(x)$の挙動が大きくことなることから場合分けをする。
(1)$0<x<1$のとき
0<x^{n}<x^{n-1}
ゆえに、上式の$0<x^n$を用いて、
\frac{1}{1+x^{n}}<\frac{1}{1+0}=1
となる。
一方で、
\frac{1}{1+x^{n}}=1-\frac{x^n}{x^n+1}>1-\frac{x^{n-1}}{x^n+1}
ここで、
\frac{x^{n-1}}{x^n+1}=\frac{1}{n}\frac{(x^n+1)'}{x^n+1}
より両辺の積分を取ると、
\int_0^{1}\frac{1}{1+x^{n}}dx>\int_0^{1}(1-\frac{1}{n}\frac{(x^n+1)'}{x^n+1})dx=[x-\frac{1}{n}log(x^n+1)]^1_0=1-\frac{log2}{n}
したがって$\substack{n\to \infty}$より、はさみうちの原理とり
\lim_{n\to \infty} \int^{1}_0 \frac{1}{1+x^n}dx=1
(2)$1<x<\sqrt{3}$のとき
1<x^n<\infty
なので、
0<\frac{1}{1+x^n}<\frac{1}{x^n}=x^{-n}
ここで、この式の両辺の積分を取ると以下のようになる。
\int^{\sqrt{3}}_1 0dx<\int^{\sqrt{3}}_1 \frac{1}{1+x^n} dx<\int^{\sqrt{3}}_1 \frac{1}{x^n} dx= \int^{\sqrt{3}}_1 x^{-n} dx
右辺は、
\int^{\sqrt{3}}_1 x^{-n} dx=[\frac{1}{-n+1}x^{-n+1}]^{\sqrt{3}}_1=\frac{1}{-n+1}(\frac{1}{\sqrt{3}^{n-1}}-1)
したがって、はさみうちの原理より、
\lim_{n\to \infty} \int^{\sqrt{3}}_1 \frac{1}{1+x^n}dx=0
(1)(2)より、
\lim_{n\to \infty}I_n=\lim_{n\to \infty} \int^{\sqrt{3}}_0 \frac{1}{1+x^n}dx=\lim_{n\to \infty} \int^{1}_0 \frac{1}{1+x^n}+\lim_{n\to \infty} \int^{\sqrt{3}}_1 \frac{1}{1+x^n}=1+0=1
したがって$\lim_{n\to \infty}I_n=1$をモンテカルロ法による定積分計算(数値計算)で推定してみよう。
モンテカルロ法
モンテカルロ法とは、乱数を用いるシミュレーションのことで、定積分つまり面積を以下のように推定する。
まず、面積$S_{All}$が既知の長方形の中に面積$S$の図形が存在しているとする。その長方形の中にランダムな点を打ったとき、その点が面積$S$の図形に内包する確率$P$は以下のように表すことができる。
P=\frac{S}{S_{All}}
したがって、未知の面積$S$は以下のように表すことができる。
S=PS_{All}
ここで、$num$を試行回数とした場合、$m$個の点が面積$S$の図形内に内包したとすると、$num$が十分に大きければ、
P=\frac{m}{num}
が常識的に成立する。
これによって、面積$S$は以下のように近似することができる。
S=\frac{m}{num}S_{All}
プログラム
この考えをもとにして以下のようなプログラムを書いた。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import random
# 全体の面積
S_all = (3**0.5)*1
# 試行回数
k=6
num=10**k
# n=1から100までのI_nを求める
Numbers=[]
I_n=[]
for n in range(1,100):
m=0
for i in range(num):
x=random.random()*3**0.5
y=random.random()
y_b=1/(1+x**n)
if y<y_b:
m=m+1
S=(m/num)*S_all
Numbers.append(n)
I_n.append(S)
# グラフ化
plt.plot(Numbers,I_n)
plt.xlabel("n")
plt.ylabel("I_n")
plt.savefig("積分値とnの関係_極限の推定.png")
plt.show()
このプログラムは計算量が多く少し時間がかかるが、以下のようなグラフが出力される。
このように$n=2$を極大値として$n$を増やすほど、$I_n$は1に漸近することが分かる。
まとめ
今回は、前半で定積分の極限計算をはさうちの原理を用いて高校数学的に解いた。一方で、後半では、その解の妥当性を調査するために、モンテカルロ法を用いた定積分の数値計算をおこなった。結果、$n$を増やせば増やすほど極限値である1に漸近した。
この問題は以下のとら様のツイッターより頂いたものである。
参考文献