定積分#

関数y=f(x)のグラフを考える。f(x)は区間axbで連続であり正であるとする。その曲線、x=a,x=bで囲まれた面積をSとする

Hide code cell source
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 7, 300)
y = 0.5 * x + np.sin(x)
xticks = []
xticklabels = []

fig, ax = plt.subplots(figsize=[5,3])
ax.plot(x, y)

a = 1
ax.axvline(a, linestyle="--")
xticks.append(a)
xticklabels.append("$a$")

b = 6
ax.axvline(b, linestyle="--")
xticks.append(b)
xticklabels.append("$b$")

ax.set(xlabel="x", ylabel="y", xticks=xticks, xticklabels=xticklabels, yticks=[])
ax.fill_between(x[(a <= x) & (x <= b)], y[(a <= x) & (x <= b)], color='lightblue', alpha=0.5)
ax.text(a + 0.4 + (b - a) // 2, 0.5, "S", color="steelblue")

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')

fig.show()
../../../_images/505bc18e706b61570ea402741d33add484d0a7d03436f9de4edeade96a7cc309.png

区間axb

a=x0<x1<x2<<xk1<xk<<xn1<b=xn

であるようなn+1個の点x0,x1,x2,,xn1,xnによってn個の小区間I1,I2,,In1,Inに分割する。小区間Ikの大きさはΔxk=xkxk1である。

xkx軸に垂直な直線をひくと、面積Sn個の「帯」に分けられる。 小区間の中の点をξkとすると、「帯」の面積は底辺の長さがΔxkで高さがyk=f(ξk)の長方形の面積f(ξk)Δxkで近似する。

このとき、求める面積Sは長方形の面積の和

Sn=k=1nf(ξk)Δxk

で近似される。このような和を積和と呼ぶことにする。

Hide code cell source
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return 0.5 * x + np.sin(x)

x = np.linspace(0, 7, 300)
y = f(x)
xticks = []
xticklabels = []

fig, ax = plt.subplots(figsize=[5,3])
ax.plot(x, y)

a = 1
ax.axvline(a, linestyle="--")
xticks.append(a)
xticklabels.append("$a$")

b = 6
ax.axvline(b, linestyle="--")
xticks.append(b)
xticklabels.append("$b$")

ax.fill_between(x[(a <= x) & (x <= b)], y[(a <= x) & (x <= b)], color='lightblue', alpha=0.5)
ax.text(a + 0.4 + (b - a) // 2, 0.5, "S", color="steelblue")

# 「帯」
x_ks = [a + i for i in range(1, b)]
for k, x_k in enumerate(x_ks):
    ax.axvline(x_k, ymax=f(x_k) / max(y), linestyle="--")
    xticks.append(x_k)
    xticklabels.append(f"$x_{k}$")

# 長方形
import matplotlib.patches as patches
linesettings = dict(color="darkorange", alpha=0.7)
delta_x = x_ks[2] - x_ks[1]
rect = patches.Rectangle(
    xy=(x_ks[1], 0),
    width=delta_x,
    height=f(x_ks[1]),
    linewidth=2,
    edgecolor='darkorange',
    facecolor='lightyellow',
    alpha=0.8
)
ax.add_patch(rect)

# axis
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')

ax.set(xlabel="x", ylabel="y", xticks=xticks, xticklabels=xticklabels, yticks=[])
fig.show()
../../../_images/76c4d99cf099cdd2a800dc8ab08d8d96051850e3b89b6cf654b1326956e11124.png

分割する小区間の長さΔxが限りなく小さくなるように細かく分割していくと、積和はある一定の値に限りなく近づく。その極限値(f(x)が連続なら必ず存在する)は面積Sに等しい。

この極限値を

abf(x)dx=limnk=1nf(ξk)Δxk

で表し、関数f(x)aからbまでの 定積分 (definite integral) という。bを積分上限、aを積分下限と呼ぶ。

負の面積#

関数が負の場合をとる場合でも積分は定義できる。積和の定義より、関数の値が負の部分はその部分からの面積への寄与は負である。

Hide code cell source
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 7, 300)
y = np.sin(x - 0.5)
xticks = []
xticklabels = []

fig, ax = plt.subplots(figsize=[5,3])
ax.plot(x, y)

a = 1
ax.axvline(a, linestyle="--")
xticks.append(a)
xticklabels.append("$a$     ")

b = 6
ax.axvline(b, linestyle="--")
xticks.append(b)
xticklabels.append("$b$     ")

ax.set(xlabel="x", ylabel="y", xticks=xticks, xticklabels=xticklabels, yticks=[])
ax.fill_between(x[(a <= x) & (x <= b)], y[(a <= x) & (x <= b)], color='lightblue', alpha=0.5)

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')

fig.show()
../../../_images/27c0c51c17f7837b3f4004186f7b19628a68bd956c9a16773d318d8dacbd6730.png

定積分の性質#

  1. ab{f(x)±g(x)}dx=abf(x)dx±abg(x)dx

  2. abkf(x)dx=kabf(x)dx(k : 定数 )

  3. axbf(x)0 ならば abf(x)dx0

  4. axbf(x)g(x) ならば abf(x)dxabg(x)dx

  5. 平均値の定理:abf(x)dx=f(c)(ba)(a<c<b)

定数cRとの和 f(x)+c を区間[a,b]上で積分する場合を考える。

積分の性質 ab[f(x)+g(x)]dx=abf(x)dx+abg(x)dxより、

ab[f(x)+c]dx=abf(x)dx+abcdx

となる。また d(cx)dx=cなので

abcdx=[cx]ab=cbca=c(ba)

である

定積分の計算#

F(x)=f(x)を満たすある関数F(x)がわかったとき、定積分

abf(x)dx

はどのように求められるか。

下限を定数、上限を変数としたaxf(t)dtも原始関数であるから、

axf(t)dt=F(x)+C

が成り立つ。

上の式でx=aとおくと

0=F(a)+C

なので

axf(t)dt=F(x)F(a)

であり、x=bとおくと

abf(t)dt=F(b)F(a)

すなわち、「定積分の値は、原始関数の積分上限での値F(b)から、下限での値F(a)を引いたもの」となる。

定積分を表す記号として

[F(t)]ab=F(b)F(a)

abf(t)dt=[F(t)]ab

abf(t)dt=F(t)|ab

という記号が用いられる

定積分の計算

abf(x)dx=F(x)|ab=F(b)F(a)

広義積分#

区間内で不連続点がある場合や、無限区間での積分へ拡張した定積分を 広義積分(improper integral)という。

2種類ある

  1. 被積分関数 f(x) が区間 axb で有限個の不連続点を持つ.

  2. 積分の上限, 下限の一方または両方が無限大である.

不連続な被積分関数#

関数 f(x) が区間 a<xb で連続であるとき、もし極限

limε+0a+εbf(x)dx

が存在するならば、 f(x)axb で積分可能であるといい、この極限値を

abf(x)dx

で表わす。同様に、 f(x)ax<b で連続であるとき(下の式の右辺が存在するならば)、

abf(x)dx=limε+0abεf(x)dx

と表わす。

いま f(x)axb 内の 1 点 c を除いて連続であるならば(下の式の右辺 の 2 つの極限が存在すると仮定して)

abf(x)dx=limε1+0acε1f(x)dx+limε2+0c+ε2bf(x)dx

区間axb 内に有限個の不連続点が存在するならば、この区間をいくつかの部分区間に分けて、そのいずれにもただ 1 つの不連続点があるようにできるので、同様に扱うことができる。

上記のような極限が存在するとき、 広義積分は収束する という。

無限区間の積分#

関数f(x)xaで連続であって、極限

limb+abf(x)dx

が存在するならば、この極限値を

af(x)dx

で表わす。同様にして、

bf(x)dx=limaabf(x)dxf(x)dx=limalimbabf(x)dx

が定義される。