積分と区分求積法

回 7-2 分野 7 微分と積分

区分求積法は、0 から 1 の幅を n 等分し、高さ f(k/n) の細い長方形の面積 (1/n) × f(k/n) を全部足して、n を大きくしたときの極限で面積 (定積分) を出す考え方です。公式は lim (1/n) Σ f(k/n) = ∫ f(x)dx (k は 1 から n、積分は 0 から 1) です。f(x) = x² なら和は n が 10 で 0.385、1000 で約 0.3338 と、積分の値 1/3 に近づきます。

細かく分けて足すという積分の芯を、長方形の和、乱数の点、累積和の 3 つの形で、Python で数えて確かめます。

曲がった形の面積を、どうやって数えるのか

長方形の面積は「幅 × 高さ」で出せます。けれど、y = x² のグラフの下のように、上の辺が曲がった形の面積は、そのままでは出せません。

そこで、形を細い長方形に切り分け、長方形の面積を全部足します。切り方を細かくするほど、はみ出しと足りない所が小さくなり、本当の面積に近づきます。この考えが積分で、高校数学では区分求積法と呼びます。

この回では、長方形の和が積分の値に近づく様子を、n を 10、100、1000 と増やしながら Python で数えて確かめます。乱数の点で面積を見積もるモンテカルロ法と、集計で使う累積和も、同じ「細かく分けて足す」の仲間として扱います。

細かく分けて足す

長方形の和で面積に近づける

y = x² の、x が 0 から 1 の範囲の下の面積を考えます。0 から 1 を n 等分すると、1 つの幅は 1/n です。k 番目の区間の右端は x = k/n なので、そこでの高さ f(k/n) を使うと、長方形の面積は (1/n) × f(k/n) です。

全部足した和 Sₙ は、次の通りです (k は 1 から n)。

Sₙ = (1/n) × {f(1/n) + f(2/n) + … + f(n/n)} = (1/n) Σ f(k/n)

区分求積法の公式

n を大きくした極限で、和は面積 (定積分) に一致します。

lim (1/n) Σ f(k/n) = ∫ f(x) dx (k は 1 から n、極限は n → ∞、積分は 0 から 1)

左辺の 1/n が長方形の幅、f(k/n) が高さ、Σ が足すことを表します。右辺の dx が幅、f(x) が高さ、∫ が足すことに当たります。f が連続な関数なら、この式が成り立ちます。f が負になる所では長方形の高さも負になるので、和と積分は「x 軸より上の面積 − 下の面積」になります。

f(x) = x² では、Sₙ = (1/n) Σ (k/n)² = Σ k²/n³ です。積分の値は 1/3 なので、lim Σ k²/n³ = 1/3 です。

a から b の範囲の形

範囲が 0 から 1 でなく a から b のときは、幅を (b − a)/n にし、k 本目の右端を a + k(b − a)/n にします。

lim ((b − a)/n) Σ f(a + k(b − a)/n) = ∫ f(x) dx (積分は a から b)

a = 0、b = 1 にすると、上の公式に戻ります。

和の極限の問題の解き方

入試でよく出るのは、逆向きの問題です。和の極限を見て、積分に書き直します。手順は次の通りです。

  1. 和の中から 1/n をくくり出す
  2. 残りを k/n だけの式にして、f(k/n) の形にする
  3. k/n が動く範囲 (k = 1 なら 1/n、k = n なら 1) から、積分の範囲を決める (この例では 0 から 1)
  4. 積分を計算する

たとえば lim Σ 1/(n + k) (k は 1 から n) は、1/(n + k) = (1/n) × 1/(1 + k/n) と書けるので、f(x) = 1/(1 + x) の 0 から 1 の積分で、答えは log 2 (約 0.693) です。

端のずれは、極限では消える

右端の高さ f(k/n) の代わりに、左端の高さ f((k − 1)/n) を使っても、極限は同じです。2 つの和の差は、端の長方形 1 本分 (1/n) × {f(1) − f(0)} だけで、n を大きくすると 0 に近づくからです。同じ理由で、和の始まりが k = 0 でも k = 1 でも、終わりが n − 1 でも n でも、答えは変わりません。

ただし、n が有限のうちは、左端と右端と真ん中で値が違います。y = x² のような増える関数では、右端の和は大きめ、左端の和は小さめに出ます。真ん中の高さを使うと、誤差がずっと小さくなります。

和が n 個でない場合

Σ の k が 1 から 2n まで動くときは、k/n が 0 から 2 まで動きます。だから積分の範囲は 0 から 2 です。幅は 1/n のままで、長方形が 2n 本並びます。積分の範囲は、k/n が動く範囲で決めます。

積の極限は log を取って和にする

かけ算が n 個並んだ式の極限は、log を取ると足し算になり、区分求積法が使えます。たとえば {(n + 1)(n + 2) … (2n) ÷ nⁿ} の n 乗根の極限は、log を取ると (1/n) Σ log(1 + k/n) で、∫ log(1 + x) dx (0 から 1) = 2 log 2 − 1 に近づきます。元に戻すと e^(2 log 2 − 1) = 4/e (約 1.4715) です。

乱数の点で面積を見積もる (モンテカルロ法)

1 辺 1 の正方形の中に、乱数で点をたくさん打ちます。求めたい形の中に入った点の割合が、形の面積の見積もりになります。四分円 (半径 1 の円の 4 分の 1) なら面積は π/4 なので、割合を 4 倍すると円周率の見積もりになります。

点の数を増やすほど見積もりは本当の値に近づきますが、近づき方はゆっくりです。誤差のおよその大きさは 1/√N に比例し、誤差を 10 分の 1 にするには点を 100 倍にする必要があります。そのかわり、次元が高い (変数が多い) 積分でも同じ手順で使えます。

累積和は、先に足しておく積分

日ごとの数を 1 日目から順に足した並びを累積和と呼びます。累積和を先に作っておけば、「3 日目から 6 日目までの合計」は、6 日目までの累積和から 2 日目までの累積和を引く 1 回の引き算で出せます。速さを足すと進んだ距離になるように、変化の量を足し上げると全体の量になる、という積分の考えと同じ形です。

動かして確かめる

1 本目は、y = x² の 0 から 1 の面積を、右端、左端、真ん中の長方形の和で求め、n を増やします。右端の和は Σ k²/n³ と同じです。

動かす 長方形の和が 1/3 に近づく

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

n 右端 左端 真ん中
10 0.385 0.285 0.3325
100 0.33835 0.32835 0.333325
1000 0.333834 0.332834 0.333333
1/3 0.333333

右端の和は大きめ、左端の和は小さめに出て、n を増やすとどちらも 1/3 に近づきます。n = 10 の右端の和 0.385 は、Σ k²/n³ で n = 10 とした値です。右端と左端の差は 1/n で、n = 1000 でも 0.001 あります。真ん中の和は、n = 10 ですでに 0.3325 と、誤差が 1000 分の 1 ほどです。

2 本目は、入試の形の和の極限を 3 つ、n を増やして確かめます。1 つ目は Σ 1/(n + k) で答えは log 2、2 つ目は k が 1 から 2n の Σ k/n² で答えは 0 から 2 の ∫ x dx = 2、3 つ目は積の極限で答えは 4/e です。

動かす 和の極限を数で確かめる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

10 0.66877 2.1 1.52278
1000 0.6929 2.001 1.47203
100000 0.69314 2.00001 1.47152
答え 0.69315 2 1.47152

3 つとも、n を増やすと答えに近づきました。2 つ目は k が 2n まで動くので積分の範囲が 0 から 2 になり、0 から 1 にすると答えを 1/2 と取り違えます。3 つ目は log を取って和にしてから区分求積法を使い、最後に exp で元に戻しています。

3 本目は、モンテカルロ法で円周率を見積もります。種を固定しているので、何度動かしても同じ数が出ます。出力の列は、点の数、見積もった円周率、本当の円周率との差です。

動かす 乱数の点で面積を見積もる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

1 回ずつ
100 3.08 0.0616
10000 3.1496 0.008
100000 3.15332 0.0117
20 回の誤差の平均
100 0.158
1000 0.0366
10000 0.0113

1 回ずつの結果を見ると、10 万点の誤差 0.0117 は、1 万点の 0.008 より大きく出ました。モンテカルロ法の 1 回の答えは乱数で前後するので、点を増やせば毎回必ず近づくわけではありません。そこで、同じ点の数で 20 回ずつ試し、誤差の平均を比べました。点を 10 倍にするごとに、誤差の平均は約 4.3 分の 1、約 3.2 分の 1 と減りました。1/√N に比例するなら 10 倍で約 3.2 分の 1 (1/√10 は約 0.32) で、20 回の平均でも乱数の揺れは残りますが、目安に近い減り方です。

1 本目の真ん中の長方形の和は、n = 1000 で誤差が 100 万分の 1 より小さくなりました。変数が 1 つの積分なら長方形の和のほうがずっと正確で、モンテカルロ法は変数が多い積分で生きます。

4 本目は、累積和です。7 日分のアクセス数から累積和を作り、区間の合計を引き算 1 回で出します。

動かす 累積和で区間の合計を出す

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

[0, 120, 210, 360]
[440, 640, 810, 870]
3〜6 日目 600
確かめ 600
全部 870

累積和の並びは、0 から始めて 1 日ずつ足した数です (長いので 2 行に分けて出しています)。3 日目から 6 日目までの合計 600 は、6 日目までの 640 から 2 日目までの 210 を引いて出しました。sum で直接足した数と同じです。区間の合計を何度も聞かれるときは、累積和を 1 回作っておけば、1 回あたり引き算 1 回で答えられます。

細かく分けて足すときに外れる所

n が有限のうちは、誤差が残る

区分求積法の公式は極限の話で、n が有限なら和と積分の値はずれます。右端と左端の和の誤差はおよそ 1/n に比例し、真ん中の和はおよそ 1/n² に比例して小さくなります (関数がなめらかなとき)。計算に使うときは、どの和を使い、n をいくつにするかで、誤差を見積もってから決めます。

小数で足すと、足す回数が多いほど誤差がたまる

計算機の小数は、1 回ごとにわずかな丸めの誤差があります。n を 1 億のように大きくすると、長方形の誤差は小さくなっても、足し算の丸めの誤差がたまっていきます。Python の math.fsum は、丸めの誤差を抑えて足す関数です。

モンテカルロ法の結果は、乱数で変わる

モンテカルロ法の答えは、使った乱数で変わります。種を固定すれば同じ答えが出ますが、それは偶然の 1 回分です。答えのばらつきの大きさも一緒に見積もるか、種を変えて何度か回して比べます。

仕事とコンテストでどう使うか

細かく分けて足す考えを使う場面は、次の通りです。

  • 確率の計算。連続の値を取る確率は、確率の密度の関数の下の面積で表される。正規分布 (5-2) で「ある値より上の割合」を出すのは、この面積の計算
  • シミュレーション。式で解けない確率や期待値を、乱数で何度も試して見積もる。リスクの見積もり、待ち行列の長さ、ゲームの当たりの確率など
  • 集計。日ごと、時間ごとの数の累積和を作り、期間の合計や、ある日までの合計を速く出す。売上の累計、ダッシュボードの数
  • 競技プログラミング。累積和は「区間の和を何度も聞かれる」問題の定番で、2 次元の表にも広げられる
  • 物理とゲームの動き。速さを細かい時間ごとに足して位置を進める計算は、区分求積法と同じ形

よくある問い

区分求積法の公式はどう覚えればよいですか

公式の 1/n を「幅」、f(k/n) を「高さ」、Σ を「足す」と読み、∫ f(x) dx の dx、f(x)、∫ に 1 つずつ対応させます。式の形より、細い長方形を並べた絵を思い浮かべると、範囲が 0 から 1 になる理由 (k/n が 0 近くから 1 まで動く) も一緒に分かります。

和の始まりが k = 0 でも答えは同じですか

同じです。k = 0 の 1 項は (1/n) × f(0) で、n を大きくすると 0 に近づくからです。ただし、ずれる項の数が n に比例して増える場合 (たとえば k が n から 2n まで動く) は、範囲が変わるので、k/n の動く範囲を数え直します。

区分求積法とモンテカルロ法はどう使い分けますか

変数が 1 つや 2 つの積分は、区分求積法の考え (長方形の和) のほうが、同じ計算の回数で正確です。変数が 10 や 100 ある積分は、格子に切ると長方形の数が膨大になるので、次元によらず同じ手順で使えるモンテカルロ法が向きます。

累積和はどんなときに使いますか

同じ並びに対して、区間の合計を何度も求めるときです。毎回足すと 1 回あたり区間の長さだけ足し算が要りますが、累積和を先に作れば 1 回の引き算で済みます。並びの値が途中で変わる場合は、累積和を作り直すか、別の仕組みを使います。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

lim Σ k/n² (k は 1 から n、n → ∞) の値はどれですか。

2 問目

y = x² の 0 から 1 の面積を、n = 10 の長方形の和で求めます。誤差が一番小さいのはどれですか。

3 問目

このコードを動かすと何が出ますか。

days = [5, 3, 4, 6]
acc = [0]
for d in days:
    acc.append(acc[-1] + d)
print(acc[4] - acc[1])

説明課題

「y = x² の 0 から 1 の面積を、細い長方形の和で求めると 1/3 に近づく理由」を、幅、高さ、n を大きくするの言葉を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

細かく分けて足す、乱数で面積を見積もる、先に足しておく、の 3 つの手を持つと、確率の計算、シミュレーション、集計の処理を同じ考えで組み立てられます。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月30日に開いて、題と中身を確かめました。

次へ

分野 7 微分と積分の回

  1. 7-1微分と勾配傾き、偏微分、勾配降下法頁で読む
  2. 7-2積分の考え細かく分けて足す、モンテカルロ法この回

分野 7 の頁へ戻るほかの分野を見る