関数y=f(x)のグラフを考える。f(x)は区間a≤x≤bで連続であり正であるとする。その曲線、x=a,x=bで囲まれた面積をSとする
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()
区間a≤x≤bを
a=x0<x1<x2<⋯<xk−1<xk<⋯<xn−1<b=xn であるようなn+1個の点x0,x1,x2,⋯,xn−1,xnによってn個の小区間I1,I2,⋯,In−1,Inに分割する。小区間Ikの大きさはΔxk=xk−xk−1である。
点xkにx軸に垂直な直線をひくと、面積Sはn個の「帯」に分けられる。
小区間の中の点をξkとすると、「帯」の面積は底辺の長さがΔxkで高さがyk=f(ξk)の長方形の面積f(ξk)Δxkで近似する。
このとき、求める面積Sは長方形の面積の和
Sn=k=1∑nf(ξk)Δxk で近似される。このような和を積和と呼ぶことにする。
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()
分割する小区間の長さΔxが限りなく小さくなるように細かく分割していくと、積和はある一定の値に限りなく近づく。その極限値(f(x)が連続なら必ず存在する)は面積Sに等しい。
この極限値を
∫abf(x)dx=n→∞limk=1∑nf(ξk)Δxk で表し、関数f(x)のaからbまでの 定積分 (definite integral) という。bを積分上限、aを積分下限と呼ぶ。
負の面積¶
関数が負の場合をとる場合でも積分は定義できる。積和の定義より、関数の値が負の部分はその部分からの面積への寄与は負である。
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()
定積分の性質¶
∫ab{f(x)±g(x)}dx=∫abf(x)dx±∫abg(x)dx
∫abkf(x)dx=k∫abf(x)dx(k : 定数 )
a≦x≦b で f(x)≧0 ならば ∫abf(x)dx≧0
a≦x≦b で f(x)≧g(x) ならば ∫abf(x)dx≧∫abg(x)dx
平均値の定理:∫abf(x)dx=f(c)(b−a)(a<c<b)
例
定数c∈Rとの和 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 となる。また dxd(cx)=cなので
∫abcdx=[cx]ab=cb−ca=c⋅(b−a) である
定積分の計算¶
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 という記号が用いられる
広義積分¶
区間内で不連続点がある場合や、無限区間での積分へ拡張した定積分を 広義積分(improper integral)という。
2種類ある
被積分関数 f(x) が区間 a≦x≦b で有限個の不連続点を持つ.
積分の上限, 下限の一方または両方が無限大である.
不連続な被積分関数¶
関数 f(x) が区間 a<x≦b で連続であるとき、もし極限
ε→+0lim∫a+εbf(x)dx が存在するならば、 f(x) は a≦x≦b で積分可能であるといい、この極限値を
∫abf(x)dx で表わす。同様に、 f(x) が a≦x<b で連続であるとき(下の式の右辺が存在するならば)、
∫abf(x)dx=ε→+0lim∫ab−εf(x)dx と表わす。
いま f(x) が a≦x≦b 内の 1 点 c を除いて連続であるならば(下の式の右辺 の 2 つの極限が存在すると仮定して)
∫abf(x)dx=ε1→+0lim∫ac−ε1f(x)dx+ε2→+0lim∫c+ε2bf(x)dx 区間a≤x≤b 内に有限個の不連続点が存在するならば、この区間をいくつかの部分区間に分けて、そのいずれにもただ 1 つの不連続点があるようにできるので、同様に扱うことができる。
上記のような極限が存在するとき、 広義積分は収束する という。
無限区間の積分¶
関数f(x)がx≥aで連続であって、極限
b→+∞lim∫abf(x)dx が存在するならば、この極限値を
∫a∞f(x)dx で表わす。同様にして、
∫−∞bf(x)dx=a→−∞lim∫abf(x)dx∫−∞∞f(x)dx=a→−∞limb→∞lim∫abf(x)dx が定義される。