区分求積法 問題(1)
次の級数の極限値を定積分に書き換え、値を求めよ。
\[ \lim_{n \to \infty} \sum_{i = 1}^{n} \frac{i^4}{n^5} \]
この問題では、次の関係を使います。
\[ \int_a^b f(x) dx = \lim_{n \to \infty} \sum_{i=1}^n f(x_i) \Delta x \]
ここで \(\Delta x = \cfrac{b-a}{n}\)、\(x_i = a + i\Delta x\) です。
この式の意味については「区分求積法」をみてください。
閉区間 \([0,1]\) での定積分とすると、\(\Delta x = \cfrac{1}{n}\)、\(x_i = \cfrac{i}{n}\) となる。
これで定積分に書き換えられた。
これを計算すると次のように値が求められる。
これで数列の和が定積分を使って、計算できました。
計算プログラムで計算結果の確認
でも、これは本当に合っているのでしょうか?
念のため、実際に和の計算をしてみましょう。
級数を計算するにはたくさんの計算が必要です。手で計算するのは大変なので、Python と Java という二つのプログラミング言語を使って、 問題の級数を計算するプログラムを作って計算してみます。
利用者が多いと思われる人気のプログラミング言語として、Python と Java を選びました。どれかひとつでもプログラミングができると、何かと便利ですよ。
プログラミング言語 Python による計算
分割数 \(n\) を \(10\) から \(100\) まで、 \(10\) 分割ずつ増やして計算するプログラムを作ります。計算結果は本当に 0.2 に近い数字になるのでしょうか。
プログラミング言語 Python (パイソン) については、ウェブサイト「Python 入門」をみてください。
calc() という名前の関数を作り、指定の分割数で級数の計算をします。
プログラムは次のようになります。
def calc(n): sum = 0; for i in range(1, n + 1): sum += pow(i, 4) / pow(n, 5) return sum if __name__ == "__main__": for n in range(10, 100 + 1, 10): ans = calc(n) print("n=%3d: %.5f" % (n, ans))
このプログラムを実行すると、次のように出力されます。
n= 10: 0.25333 n= 20: 0.22583 n= 30: 0.21704 n= 40: 0.21271 n= 50: 0.21013 n= 60: 0.20843 n= 70: 0.20721 n= 80: 0.20630 n= 90: 0.20560 n=100: 0.20503
\(n=10\) のときに \(0.25333\) だったのが、\(n=100\) のときには \(0.20503\) になっています。
この結果、分割数 \(n\) が増えていくと確かに \(0.2\) に近づいていっていることがわかりますね。
プログラミング言語 Java での計算
この問題の級数の計算を Java でプログラムすると次のようになります。
プログラミング言語 Java については「Java 入門」などを参考にしてください。
public class Main { public static void main(String[] args) { for (int n = 10; n <= 100; n += 10) { double ans = calc((double) n); System.out.format("n=%3d: %.5f\n", n, ans); } } public static double calc(double n) { double sum = 0.0; int N = (int) n; for (int i = 1; i <= N; i++) { sum += Math.pow((double) i, 4) / Math.pow(n, 5); } return sum; } }
これの実行結果は Python のときと全く同一です。
以上、級数を定積分に直して値を計算して、実際に計算して正しいことを確認しました。