連続函数

黒木玄

2018-04-20

このファイルは次の場所できれいに閲覧できる:

このファイルは Julia Box で利用できる.

自分のパソコンにJulia言語をインストールしたい場合には

を参照せよ.

論理的に完璧な説明をするつもりはない. 細部のいい加減な部分は自分で訂正・修正せよ.

$ \newcommand\eps{\varepsilon} \newcommand\ds{\displaystyle} \newcommand\Z{{\mathbb Z}} \newcommand\R{{\mathbb R}} \newcommand\C{{\mathbb C}} \newcommand\QED{\text{□}} \newcommand\root{\sqrt} $

In [1]:
using Plots
gr(); ENV["PLOTS_TEST"] = "true"
#clibrary(:colorcet)
clibrary(:misc)

function pngplot(P...; kwargs...)
    sleep(0.1)
    pngfile = tempname() * ".png"
    savefig(plot(P...; kwargs...), pngfile)
    showimg("image/png", pngfile)
end
pngplot(; kwargs...) = pngplot(plot!(; kwargs...))

showimg(mime, fn) = open(fn) do f
    base64 = base64encode(f)
    display("text/html", """<img src="data:$mime;base64,$base64">""")
end

using SymPy
using SpecialFunctions
using QuadGK

連続函数

連続函数の定義

函数 $f(x)$ が $x=\alpha$ で連続であるとは, $x\to\alpha$ のとき $f(x)\to f(\alpha)$ が成立することであると定める.

定理: 以下の2つの条件は互いに同値である:

(1) $f(x)$ は $x=\alpha$ で連続である. (すなわち $x\to\alpha$ のとき $f(x)\to f(\alpha)$ となる.)

(2) $\alpha$ に収束する任意の数列 $a_n$ について $n\to\infty$ のとき $f(a_n)\to f(\alpha)$.

証明: (1)ならば(2)が成立することは自明なので, (2)ならば(1)を示せば十分である. (2)ならば(1)の対偶を示すために, (1)の否定を仮定する. すなわち, $x\to\alpha$ のとき $f(x)\to\alpha$ とならないと仮定する.

そのとき, ある $\eps>0$ が存在して, 任意の正の整数 $n$ についてある $a_n$ で $|a_n-\alpha|<1/n$ と $|f(a_n)-f(\alpha)|\geqq\eps$ を満たすものが存在する. このとき, $a_n$ は $\alpha$ に収束しているが, $f(a_n)$ は $f(\alpha)$ に収束していない.

以上によって(1)の否定から(2)の否定が導かれることがわかった. これで示すべきことがすべて示された. $\QED$

中間値の定理

中間値の定理: $f$ は閉区間 $[a,b]$ 上の実数値連続函数であるとする. このとき $f(a)$ と $f(b)$ のあいだにある任意の実数 $\alpha$ に対して, ある $\xi\in[a,b]$ で $f(\xi)=\alpha$ を満たすものが存在する. $\QED$

補足: $x$ が $a$ と $b$ のあいだにあるとは $a\leqq x\leqq b$ または $a\geqq x\geqq b$ が成立していることだと定める. $\QED$

注意: 中間値の定理において, $f(a)<\alpha<f(b)$ または $f(a)>\alpha>f(b)$ ならば $f(\xi)=\alpha$ をみたす $\xi\in[a,b]$ は $a<\xi<b$ となるように取れる. $\QED$

中間値の定理の証明: $f(x)$ の代わりに $f(x)-\alpha$ を考えることによって, $\alpha=0$ の場合に証明すれば十分である. 必要なら $f(x)$ の代わりに $-f(x)$ を考えることによって, $f(a)\leqq 0$, $f(b)\geqq 0$ の場合に証明すれば十分である. 以下, そのように仮定する.

$(a_1, b_1)=(a,b)$ とおく. $n$ について帰納的に $f(a_n)\leqq 0\leqq f(b_n)$ を満たす $(a_n,b_n)$ を次のように定めることができる.

  • $f((a_n+b_n)/2)\geqq 0$ ならば $(a_{n+1}, b_{n+1}) = (a_{n+1}, (a_n+b_n)/2)$.

  • $f((a_n+b_n)/2)< 0$ ならば, $(a_{n+1}, b_{n+1}) = ((a_n+b_n)/2, b_n)$.

このとき, $a_1\leqq a_2\leqq\cdots$, $\cdots\leqq b_2\leqq b_1$ でかつ $|a_n-b_n|=|a-b|/2^{n-1}$ であることから, $a_n$ と $b_n$ は同一の値 $\xi$ に収束する. そのとき $f(a_n)$ と $f(b_n)$ も同一の値 $f(\xi)$ に収束し, $f(a_n)\leqq 0\leqq f(b_n)$ なのでその収束先は $0$ でなければいけない. ゆえに $f(\xi)=0$. $\QED$

注意: 上の証明法の二分法 (bisection method)と呼ぶことがある. 実際の数値計算でも利用可能な方法である. $\QED$

In [2]:
function bisection(f, a, b; atol=eps(), maxiter=10^3)
    f(a)*f(b) > 0 && return NaN
    aₙ, bₙ = a, b
    k = 0
    while abs(aₙ - bₙ) > atol
        k > maxiter && return NaN
        c = (aₙ+bₙ)/2
        if f(bₙ)*f(c)  0
            aₙ, bₙ = aₙ, c
        else
            aₙ, bₙ = c, bₙ
        end
        k += 1
    end
    return (aₙ+bₙ)/2
end
Out[2]:
bisection (generic function with 1 method)
In [3]:
f(x) = x^2 - 2
@show ξ = bisection(f, 1, 2)
@show 2
@show round(f(ξ), 15)

x = 1:0.005:2
plot(size=(400,250), legend=:topleft)
plot!(x, f.(x), label="y = x^2 - 2")
hline!([0], label="y = 0")
vline!([ξ], label="x = $(round(ξ, 5))", ls=:dash)
ξ = bisection(f, 1, 2) = 1.414213562373095
√2 = 1.4142135623730951
round(f(ξ), 15) = -0.0
Out[3]:
1.00 1.25 1.50 1.75 2.00 -1 0 1 2 y = x^2 - 2 y = 0 x = 1.41421
In [4]:
f(x) = cos(x) - x
@show ξ = bisection(f, 0, 1)
@show round(f(ξ), 15)

x = 0:0.005:1
plot(size=(400,250))
plot!(x, f.(x), label="y = cos x - x")
hline!([0], label="y = 0")
vline!([ξ], label="x = $(round(ξ, 5))", ls=:dash)
ξ = bisection(f, 0, 1) = 0.7390851332151606
round(f(ξ), 15) = 0.0
Out[4]:
0.0 0.2 0.4 0.6 0.8 1.0 -0.25 0.00 0.25 0.50 0.75 1.00 y = cos x - x y = 0 x = 0.73909

不動点定理

不動点定理: 閉区間 $[a,b]$ からそれ自身への連続写像 $f$ に対して, ある $\xi\in[a,b]$ で $f(\xi)=\xi$ を満たすものが存在する. (そのような $\xi$ を $f$ の不動点と呼ぶ.)

証明: $g(x)=f(x)-x$ とおく. このとき $g$ は閉区間 $[a,b]$ 上の実数値連続函数であり, $g(a)=f(a)-a\geqq 0$ かつ $g(b)=f(b)-b\leqq 0$ となり, $0$ は $g(a)$ と $g(b)$ のあいだにある実数になる. ゆえに中間値の定理より, ある $\xi\in[a,b]$ で $g(\xi)=0$ すなわち $f(\xi)=\xi$ を満たすものが存在する. $\QED$

補足: 以下の形の $\R$ の部分集合を区間と呼ぶ:

$$ \begin{aligned} & [a,b] = \{\,x\in\R\mid a\leqq x\leqq b\,\}, \\ & [a,b) = \{\,x\in\R\mid a\leqq x< b\,\}, \\ & (a,b] = \{\,x\in\R\mid a< x\leqq b\,\}, \\ & (a,b) = \{\,x\in\R\mid a< x< b\,\}. \\ \end{aligned} $$

$[a,b]$ は閉区間と呼ばれ, $(a,b)$ は開区間と呼ばれる. $(-\infty,b]$ のように無限に長い区間を扱うこともある. $\QED$

補足: 閉区間 $[a,b]$ からそれ自身への写像とは $x\in[a,b]$ に $f(x)\in[a,b]$ を対応させる函数のことである. そのグラフ $G=\{\,(x,f(x))\mid a\leqq x\leqq b\,\}$ は正方形 $[a,b]\times[a,b]=\{\,(x,y)\in\R^2\mid a\leqq x,y\leqq b\,\}$ に含まれる. $\QED$

注意: 上の不動点定理は以下のように説明することもできる. 簡単のため $[a,b]=[-1,1]$ の場合を考える. もしも $f$ の不動点が存在しなかったならば, すべての $x\in [-1,1]$ について $f(x)\ne x$ となる. ゆえに $x\in[-1,1]$ の連続函数 $g(x)$ を

$$ g(x) = \frac{x-f(x)}{|x-f(x)|} $$

と定めることができる. すべての $x\in[-1,1]$ について $g(x)$ は $\pm1$ のどちらかになり, $-1<f(-1)$ なので $g(-1)=-1$ となり, $1>f(1)$ なので $g(1)=1$ となる. しかし, そのような $[-1,1]$ 上の連続函数は存在するはずがないので, 不動点が存在するはずである. $\QED$

In [5]:
f(x) = 0.6 + 0.4x - 0.8x^2 + 0.3sin(10x-0.5)
ξ = bisection(x->f(x)-x, 0, 1)
x = 0:0.01:1
plot(size=(400,400), aspect_ration=1, legend=false)
plot!(xlim=(0,1), ylim=(0,1))
plot!(x, f.(x))
plot!([0,1], [0,1])
hline!([ξ], ls=:dash, color=:red)
vline!([ξ], ls=:dash, color=:red)
Out[5]:
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0

注意: 上の易しい不動点定理はBrouwerの不動点定理の次元1の特別な場合である. $\QED$

Brouwerの不動点定理: $n$ 次元閉円盤

$$ D = \{\,(x_1,\ldots,x_n)\in\R^n\mid x_1^2+\cdots+x_n^2\leqq 1\,\} $$

からそれ自身への連続写像 $f$ は不動点を持つ. すなわち, ある $\xi\in D$ で $f(\xi)=\xi$ を満たすものが存在する. $\QED$

証明略.

研究課題: $n=2$ の場合にBrouwerの不動点定理が直観的には当然成立するべき結果であることがわかるような説明を見付けよ. $\QED$

ヒント: 上にある注意の方法をこの場合に適用してみよ. $\QED$

閉区間上の実数値連続函数は最大最小を持つ

定理: $f$ は閉区間 $[a,b]$ 上の実数値連続函数であるとする. このとき, 実数の集合 $f([a,b]) = \{\,f(x)\mid a\leqq x\leqq b\,\}$ には最大値 $M$ と最小値 $m$ が存在する. $\QED$

証明略.

注意: 上の定理の状況である $\xi,\eta\in[a,b]$ で $f(\xi)=M$, $f(\eta)=m$ を満たすものが存在する. $\QED$

例1: コンパクト台を持つ滑らかな連続函数

函数

$$ f(x) = \begin{cases} 0 & (x\leqq 0) \\ e^{-1/x} & (x>0) \\ \end{cases} $$

は $x\searrow 0$ のとき $e^{-1/x} \to 0$ なので連続函数である. ここで $x\searrow 0$ は $x$ が上から(正の値のまま) $0$ に近付くことを意味している($x\to +0$ と書くこともある). $f(x)$ は任意有限回微分可能である(そのとき $C^\infty$ 函数であるという).

問題: $n$ が非負の整数のとき, $x\searrow 0$ のとき $\ds \frac{e^{-1/x}}{x^n}\to 0$ となることを示せ. $\QED$

証明: $t = 1/x$ とおくと, 示すべきことは, $t\to\infty$ のとき $\ds\frac{t^n}{e^t}\to 0$ となることと同値である. しかし, それは指数函数が多項式函数より速く増加することを意味しているので, 成立することがすでにわかっている. $\QED$

注意: $e^{-1/x}$ の $n$ 階の導函数は $\ds\frac{e^{-1/x}}{x^n}$ に $x$ の多項式をかけた形になる. そのことより, $x\searrow 0$ のとき $e^{-1/x}$ の $n$ 階の導函数も $0$ に収束することがわかる. $\QED$

In [6]:
x = symbols("x")
diffexpneginvx(n) = diff(exp(-1/x), x, n)
[diffexpneginvx(n) for n in 0:3]
Out[6]:
\begin{bmatrix}e^{- \frac{1}{x}}\\\frac{e^{- \frac{1}{x}}}{x^{2}}\\\frac{e^{- \frac{1}{x}}}{x^{3}} \left(-2 + \frac{1}{x}\right)\\\frac{e^{- \frac{1}{x}}}{x^{4}} \left(6 - \frac{6}{x} + \frac{1}{x^{2}}\right)\end{bmatrix}
In [7]:
f(x) = x > 0 ? exp(-1/x) : zero(x)
g(x) = x > 0 ? exp(-1/x)/x^2 : zero(x)

p1 = plot(ylims=(-0.1, 1.0), legend=:topleft)
plot!(f, -10, 20, label="f(x)")

p2 = plot(ylims=(-0.1, 0.6), legend=:topright)
plot!(g, -10, 20, label="df(x)/dx")

plot(p1, p2, size=(700,200))
Out[7]:
-5 0 5 10 15 0.00 0.25 0.50 0.75 1.00 f(x) -5 0 5 10 15 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 df(x)/dx

問題: $x\leqq 0$ のとき最小値 $0$ になり, $x\geqq 1$ のとき最大値 $1$ になる函数で任意有限回微分可能なものが存在することを示せ.

解答例: 函数

$$ f(x) = \begin{cases} 0 & (x\leqq 0\;\text{or}\; 1\geqq x) \\ \exp\left(-\frac{1}{x}+\frac{1}{x-1}\right) & (0<x<1) \\ \end{cases} $$

は任意有限回微分可能である. $Z=\int_0^1 f(x)\,dx$ とおき, $g(x)=f(x)/Z$ とおくと, $\int_0^1 g(x)\,dx=1$ となる. このとき, 函数

$$ h(x) = \int_{-\infty}^x g(t)\,dt $$

は問題の条件を満たしている. $\QED$

In [8]:
f(x) = 0 < x < 1 ? exp(-1/x+1/(x-1)) : zero(x)
@show Z, err = quadgk(f, 0, 1) # = ∫_0^1 f(x) dx, error
g(x) = f(x)/Z
h(x) = quadgk(g, -1, x)[1] # = ∫_{-1}^x g(t) dt

p1 = plot(legend=:topleft, ylims=(-0.1,2.7))
plot!(g, -1, 2, label="g(x)")

p2 = plot(legend=:topleft, ylims=(-0.1, 1.1))
plot!(h, -1, 2, label="h(x)")

plot(p1, p2, size=(700,200))
(Z, err) = quadgk(f, 0, 1) = (0.007029858406609658, 3.23578265950559e-11)
Out[8]:
-0.5 0.0 0.5 1.0 1.5 0.0 0.5 1.0 1.5 2.0 2.5 g(x) -0.5 0.0 0.5 1.0 1.5 0.00 0.25 0.50 0.75 1.00 h(x)

問題: $x\leqq 0$ または $4\leqq x$ のとき最小値 $0$ になり, $1\leqq x\leqq 3$ のとき最大値 $1$ になる函数で任意有限回微分可能なものが存在することを示せ.

解答例: 上の問題の函数 $h(x)$ を用いて, 函数 $\phi(x)$ を

$$ \phi(x) = h(x) h(4-x) $$

と定めると条件を満たしている. $\QED$

In [9]:
φ(x) = h(x)*h(4-x)

plot(size=(400, 200), ylims=(-0.1, 1.1))
plot!(φ, -1, 5, label="phi(x)")
Out[9]:
0 1 2 3 4 0.00 0.25 0.50 0.75 1.00 phi(x)

例2: 無限に振動する不連続函数

函数

$$ f(x) = \begin{cases} \sin(1/x) & (x\ne 0) \\ 0 & (x=0) \end{cases} $$

は $x=0$ で不連続である. なぜならば $x\to 0$ のとき $f(x)$ は振幅を保ったまま無限に振動するからである.

In [10]:
f(x) = x == 0 ? 0 : sin(1/x)

p1 = plot(size=(400, 250), xlabel="x", ylabel="y")
plot!(f, -1.0, 1.0, ylims=(-1.2, 2.0), label="y = sin(1/x)")

p2 = plot(size=(400, 250), xlabel="x", ylabel="y")
plot!(f, -0.1, 0.1, ylims=(-1.2, 2.0), label="y = sin(1/x)")

plot(p1, p2, size=(700, 250))
Out[10]:
-0.75 -0.50 -0.25 0.00 0.25 0.50 0.75 -1 0 1 2 x y y = sin(1/x) -0.075 -0.050 -0.025 0.000 0.025 0.050 0.075 -1 0 1 2 x y y = sin(1/x)

例3: 無限に振動する連続函数

函数

$$ g(x) = \begin{cases} x\sin(1/x) & (x\ne 0) \\ 0 & (x=0) \end{cases} $$

は $x\to 0$ のとき無限に振動しながら $0$ に収束するので連続である.

In [11]:
f(x) = x == 0 ? 0 : x*sin(1/x)

p1 = plot(size=(400, 250), xlabel="x", ylabel="y")
plot!(f, -3, 3, ylims=(-0.4, 1.5), label="y = x sin(1/x)")

p2 = plot(size=(400, 250), xlabel="x", ylabel="y")
plot!(f, -0.3, 0.3, ylims=(-0.25, 0.3), label="y = x sin(1/x)")

plot(p1, p2, size=(700, 250))
Out[11]:
-2 -1 0 1 2 0.0 0.5 1.0 1.5 x y y = x sin(1/x) -0.2 -0.1 0.0 0.1 0.2 -0.2 -0.1 0.0 0.1 0.2 x y y = x sin(1/x)

例4: Weierstrass函数

$0<a<1$ について, 函数

$$ F(x) = \sum_{n=0}^\infty a^n\cos(b^n\pi x) $$

は連続函数であり, Weierstrass 函数と呼ばれる. $b$ が正の奇数であり, $ab>1+3\pi/2$ のとき至るところ微分不可能なことが知られている.

注意: 一般に, 区間 $I$ 上の連続函数列 $f_n(x)$ について, $x$ によらない非負実数列 $M_n$ で

$$ |f_n(x)|\leqq M_n \quad (x\in I), \qquad \sum_{n=1}^\infty M_n < \infty $$

を満たしているならば,

$$ F(x) = \sum_{n=1}^\infty f_n(x)\quad (x\in I) $$

で定義される函数 $F(x)$ は $I$ 上の連続函数になる. 証明略. $\QED$

In [12]:
struct WeierstrassFunction{R<:Real, S<:Integer, T<:Integer} <: Function
    a::R;  b::S;  N::T
end
(F::WeierstrassFunction)(x) = sum(n->F.a^n*cos(F.b^n*π*x), 0:F.N)
In [13]:
F = WeierstrassFunction(0.6, 13, 100)
@show F.a*F.b, 1+3π/2

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2, 2)

p2 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2/F.b, 2/F.b)

plot(p1, p2, size=(700, 250))
(F.a * F.b, 1 + (3π) / 2) = (7.8, 5.71238898038469)
Out[13]:
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 -2 -1 0 1 2 Weierstrass function: a = 0.6, b = 13 x y -0.15 -0.10 -0.05 0.00 0.05 0.10 0.15 0.0 0.5 1.0 1.5 2.0 Weierstrass function: a = 0.6, b = 13 x y
In [14]:
F = WeierstrassFunction(0.85, 7, 100)
@show F.a*F.b, 1+3π/2

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2, 2)

p2 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2/F.b, 2/F.b)

plot(p1, p2, size=(700, 250))
(F.a * F.b, 1 + (3π) / 2) = (5.95, 5.71238898038469)
Out[14]:
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 -4 -2 0 2 4 Weierstrass function: a = 0.85, b = 7 x y -0.2 -0.1 0.0 0.1 0.2 -2 -1 0 1 2 3 4 Weierstrass function: a = 0.85, b = 7 x y
In [15]:
F = WeierstrassFunction(1/4, 3, 100)
@show F.a*F.b, 1+3π/2

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2, 2)

p2 = plot(legend=false, titlefontsize=11)
plot!(title="Weierstrass function: a = $(F.a), b = $(F.b)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
plot!(F, -2/F.b, 2/F.b)

plot(p1, p2, size=(700, 250))
(F.a * F.b, 1 + (3π) / 2) = (0.75, 5.71238898038469)
Out[15]:
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 -1.0 -0.5 0.0 0.5 1.0 Weierstrass function: a = 0.25, b = 3 x y -0.50 -0.25 0.00 0.25 0.50 0.0 0.2 0.4 0.6 0.8 1.0 1.2 Weierstrass function: a = 0.25, b = 3 x y

例5: 高木函数

$0<w<1$ について

$$ F(x) = \sum_{n=0}^\infty w^n s(2^n x), \quad s(x)=\min_{k\in\Z}|x-k| $$

で定義される函数 $F(x)$ は連続函数である. $w=1/2$ のとき $F(x)$ は高木函数と呼ばれる.

In [16]:
seesaw(x) = abs(x - round(x))
plot(seesaw, size=(400, 250), ylims=(-0.1, 0.7), label="seesaw(x)")
Out[16]:
-4 -2 0 2 4 0.0 0.2 0.4 0.6 seesaw(x)
In [17]:
struct TakagiFunction{R<:Real, T<:Integer} <: Function
    w::R;  N::T
end
(F::TakagiFunction)(x) = sum(n->F.w^n*seesaw(2^n*x), 0:F.N)
In [18]:
F = TakagiFunction(0.5, 100)

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Takagi function: w = $(F.w)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0:0.001:1
plot!(x, F.(x))

p2 = plot(legend=false, titlefontsize=11)
plot!(title="Takagi function: w = $(F.w)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0.25:0.00025:0.50
plot!(x, F.(x))

plot(p1, p2, size=(700, 250))
Out[18]:
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 Takagi function: w = 0.5 x y 0.25 0.30 0.35 0.40 0.45 0.50 0.50 0.55 0.60 0.65 Takagi function: w = 0.5 x y
In [19]:
F = TakagiFunction(0.7, 100)

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Takagi function: w = $(F.w)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0:0.001:1
plot!(x, F.(x))

p2 = plot(legend=false, titlefontsize=11)
plot!(title="Takagi function: w = $(F.w)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0.250:0.00025:0.50
plot!(x, F.(x))

plot(p1, p2, size=(700, 250))
Out[19]:
0.0 0.2 0.4 0.6 0.8 1.0 0.00 0.25 0.50 0.75 1.00 Takagi function: w = 0.7 x y 0.25 0.30 0.35 0.40 0.45 0.50 0.5 0.6 0.7 0.8 0.9 1.0 1.1 Takagi function: w = 0.7 x y
In [20]:
F = TakagiFunction(1/4, 100)

p1 = plot(legend=false, titlefontsize=11)
plot!(title="Takagi function: w = $(F.w)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0:0.001:1
plot!(x, F.(x))

p2 = plot(legend=false, titlefontsize=11)
plot!(title="y = x(1-x)")
plot!(size=(600, 420), xlabel="x", ylabel="y")
x = 0:0.001:1
plot!(x, x.*(1.-x))

plot(p1, p2, size=(700, 250))
Out[20]:
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.1 0.2 0.3 0.4 0.5 Takagi function: w = 0.25 x y 0.0 0.2 0.4 0.6 0.8 1.0 0.00 0.05 0.10 0.15 0.20 0.25 y = x(1-x) x y

一様連続性

$f(x)$ が $x=a$ で連続であるとは, $x\to a$ のとき $f(x)\to f(a)$ となることであった. 区間 $I$ 上で定義された函数 $f(x)$ が連続であるとはすべての $x=a\in I$ で $f(x)$ が連続なことであると定める.

しかし, 一般に, 連続な $f(x)$ について, 各 $a\in I$ ごとに $x\to a$ のときの $f(x)\to f(a)$ の「収束の速さ」は一般に異なる. $x\to a$ のときの $f(x)\to f(a)$ の「収束の速さ」がすべての $a\in I$ について同時に上からおさえられるとき, $f(x)$ は $I$ 上で一様連続であるという.

正確には一様連続性は次のように定義される. 次の条件が成立しているとき, $f(x)$ は $I$ 上で一様連続であるという: 任意に $\eps>0$ を与えたとき, ある $\delta>0$ が存在して, 任意の $x,a\in I$ について $|x-a|<\delta$ ならば $|f(x)-f(a)|<\eps$ が成立する.

$x\to a$ のとき $f(x)\to f(a)$ が成立するということは, $x$ を $a$ に近付けることによって $f(a)$ を $f(x)$ でいくらでも近似できるということである. $x\to a$ のとき $f(x)\to f(a)$ であるということは, 許される誤差 $\eps > 0$ を与えたとき, ある $\delta > 0$ が存在して, $f(x)$ と $f(a)$ の違いを $\eps$ 未満におさえるためには $x$ と $a$ の違いを $\delta$ 未満におさえればよいということである.

単なる連続性の定義では $\delta$ の取り方は各 $a$ ごとに違っていてもよい. $\delta$ を小さく取らなければいけない $a$ においては $x\to a$ のときの $f(x)\to f(a)$ の「収束の速さ」は「遅い」ということである.

一様連続の定義は, すべての $a$ について共通の $\delta>0$ を選べることを意味している(すなわち $\delta>0$ は $\eps>0$ に依存するが, $a\in I$ には依存しないようにできることを意味している).

閉区間上の連続函数が一様連続であること

定理: 閉区間上の連続函数は一様連続である. $\QED$

証明略.

閉区間上の函数については, 連続函数と一様連続函数を区別しなくてもよい.

連続だが一様連続ではない函数の例

問題: $x>0$ の連続函数 $f(x)=1/x$ は区間 $(0,1]$ 上では一様連続ではないことを示せ.

解答例: 図を描けば, $\eps>0$ と $a>0$ について,

$$ x>0,\; |x-a|<\delta \implies |f(x)-f(a)|<\eps \tag{$*$} $$

すなわち

$$ x>0,\; a-\delta < x < a+\delta \implies \frac{1}{a}-\eps < \frac{1}{x} < \frac{1}{a}+\eps $$

かつ $\delta>0$ となるためには,

$$ \delta\leqq a - \frac{1}{1/a + \eps} = \frac{a^2\eps}{1+a\eps} < a^2\eps $$

でなければいけないことがわかる. したがって $a>0$ を小さくすれば $\delta>0$ はいくらでも小さくなる. ゆえに $a$ と無関係に($*$)を満たす $\delta > 0$ を取ることは不可能である. つまり $f(x)$ は $(0,1]$ 上で一様連続ではない. $\QED$

問題: 任意に与えられた $r>0$ について, $f(x)=1/x$ は区間 $[r,\infty)$ 上で一様連続であることを示せ.

解答例: $\eps > 0$ であるとする. $a^2\eps/(1+a\eps)$ は $a$ について単調増加函数なので, $a$ が $[r,\infty)$ 内を動くとき, その最小値は $r^2\eps/(1+r\eps)$ になる. それを $\delta$ とおけばすべての $a\in[r,\infty)$ について同時に ($*$) が成立する. これで $f(x)=1/x$ が $[r,\infty)$ 上一様連続であることがわかった. $\QED$

注意: 微分可能函数については, 区間 $I$ 上でのグラフの傾きが幾らでも大きくなる函数は $I$ 上で一様連続ではなくなるが, 区間 $I$ 上でのグラフの傾きに上限がある場合には一様連続になる. $\QED$

In [21]:
f(x) = 1/x
x = 0.1:0.001:1

ε = 0.7

plot(xlims=(0,1), ylims=(0,10), size=(500, 350))
plot!(x, f.(x), label="y = 1/x", lw=2)

a = 0.15
δ₀ = a - 1/(1/a+ε)
δ₁ = 1/(1/a-ε) - a
c = :red
plot!([a-δ₀,a-δ₀], [0,f(a-δ₀)], color=c, label="")
plot!([a,a], [0,f(a)], color=c, lw=2, label="x = $a")
plot!([a+δ₁,a+δ₁], [0,f(a+δ₁)], color=c, label="")
plot!([0,a-δ₀], [f(a-δ₀),f(a-δ₀)], ls=:dash, color=c, label="y = 1/$a+")
plot!([0,a], [f(a),f(a)], color=c, ls=:dash, lw=2, label="y = 1/$a")
plot!([0,a+δ₁], [f(a+δ₁),f(a+δ₁)], ls=:dashdot, color=c, label="y = 1/$a-")

a = 0.5
δ₀ = a - 1/(1/a+ε)
δ₁ = 1/(1/a-ε) - a
c = :orange
plot!([a-δ₀,a-δ₀], [0,f(a-δ₀)], color=c, label="")
plot!([a,a], [0,f(a)], color=c, lw=2, label="x = $a")
plot!([a+δ₁,a+δ₁], [0,f(a+δ₁)], color=c, label="")
plot!([0,a-δ₀], [f(a-δ₀),f(a-δ₀)], ls=:dash, color=c, label="y = 1/$a+")
plot!([0,a], [f(a),f(a)], color=c, ls=:dash, lw=2, label="y = 1/$a")
plot!([0,a+δ₁], [f(a+δ₁),f(a+δ₁)], ls=:dashdot, color=c, label="y = 1/$a-")
Out[21]:
0.0 0.2 0.4 0.6 0.8 1.0 0 2 4 6 8 10 y = 1/x x = 0.15 y = 1/0.15+0.7 y = 1/0.15 y = 1/0.15-0.7 x = 0.5 y = 1/0.5+0.7 y = 1/0.5 y = 1/0.5-0.7

一様収束

函数列の各点収束の定義

各点収束の定義: 区間 $I$ 上の函数の列 $f_1(x), f_2(x), f_3(x), \ldots$ が函数 $\varphi(x)$ に各点収束するとは, 各 $x\in I$ ごとに, 任意の $\eps>0$ に対して, ある番号 $N$ が存在して,

$$ |f_n(x) - f(x)| < \eps \quad (n\geqq N) $$

が成立することだと定める.

$$ |f_n(x) - \varphi(x)| < \eps \quad (n\geqq N,\; x\in I) $$

が成立することだと定める. すなわち, 各 $x\in I$ ごとに,

$$ f_n(x)\to \varphi(x) \quad (n\to\infty) $$

が成立するとき, 函数列 $f_n(x)$ は $I$ 上で $\varphi(x)$ に各点収束するという. 各点収束においては, 各点 $x\in I$ ごとに $f_n(x)$ の $\varphi(x)$ への収束の速さは全く違っていてもよい. $\QED$

問題: 閉区間 $I = [0,1]$ 上で函数列 $f_n(x)=x^2$ は函数

$$ \varphi(x) = \begin{cases} 0 & (0\leqq x < 1) \\ 1 & (x = 1) \\ \end{cases} $$

に各点収束することを示せ. $0\leqq x<1$ が $1$ に近ければ近いほど, $f_n(x)=x^n$ の $0$ に収束する速さは遅くなることに注意せよ. $\QED$

In [22]:
f(n,x) = x^n

x = 0:0.005:1
p1 = plot(xlims=(0,1), legend=:topleft)
for n in 1:12
    plot!(x, f.(n,x), label="n = $n")
end
plot(p1, size=(350,350), aspect_ratio=1, title="y = x^n")
Out[22]:
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 y = x^n n = 1 n = 2 n = 3 n = 4 n = 5 n = 6 n = 7 n = 8 n = 9 n = 10 n = 11 n = 12

函数列の一様収束の定義

一様収束の定理: 区間 $I$ 上の函数の列 $f_1(x), f_2(x), f_3(x), \ldots$ が函数 $\varphi(x)$ に一様収束するとは, 任意の $\eps>0$ に対して, ある番号 $N$ が存在して, すべての $x\in I$ について一斉に,

$$ |f_n(x) - \varphi(x)| < \eps \quad (n\geqq N) $$

が成立することだと定める. $\QED$

この定義は次と同値である(証明略).

同値な定義: 区間 $I$ 上の函数列 $f_n(x)$ が函数 $\varphi(x)$ に一様収束するとは, *$x\in I$ に無関係な非負実数列 $c_n$ で

$$ |f_n(x) - \varphi(x)|\leqq c_n \to 0 \quad (n\to\infty) $$

を満たすものが存在することだと定める. $\QED$

すなわち, すべての $x\in I$ について一斉に $f_n(x)$ と $\varphi(x)$ の違いの大きさを $n\to\infty$ で一様に小さくできるときに(すなわち $0$ に収束する非負実数列 $c_n$ で違いの大きさが上からおさえられるとき), $f_n(x)$ は $\varphi(x)$ に一様収束するという.

問題: 閉区間 $I = [0,1]$ 上で函数列 $f_n(x)=x^2$ は函数

$$ \varphi(x) = \begin{cases} 0 & (0\leqq x < 1) \\ 1 & (x = 1) \\ \end{cases} $$

に一様収束しないことを示せ.

解答例: $0<x<1$ のとき $|x| \geqq 1/2^{1/n}$ とすると, $f_n(x)\geqq 1/2$ となる. これで, $f_n(x)$ と $\varphi(x)$ の違いの大きさをすべての $x\in I$ について一斉に $1/2$ より小さくできないことがわかった. $\QED$

In [23]:
f(n,x) = x^n

x = 0:0.005:1

n = 3
p1 = plot(xlims=(-0.1,1.1), legend=:topleft)
plot!(x, f.(n,x), label="y = x^$n")
hline!([1/2], label="y = 1/2")
plot!([1/2^(1/n), 1/2^(1/n)], [0, 1/2], label="x = 1/2^{1/$n}")

n = 9
p2 = plot(xlims=(-0.1,1.1), legend=:topleft)
plot!(x, f.(n,x), label="y = x^$n")
hline!([1/2], label="y = 1/2")
plot!([1/2^(1/n), 1/2^(1/n)], [0, 1/2], label="x = 1/2^{1/$n}")

plot(p1, p2, size=(700, 250))
Out[23]:
0.00 0.25 0.50 0.75 1.00 0.0 0.2 0.4 0.6 0.8 1.0 y = x^3 y = 1/2 x = 1/2^{1/3} 0.00 0.25 0.50 0.75 1.00 0.0 0.2 0.4 0.6 0.8 1.0 y = x^9 y = 1/2 x = 1/2^{1/9}

連続函数列の一様収束先も連続になること

定理: 区間 $I$ 上の連続な函数の列 $f_n(x)$ が函数 $\varphi(x)$ に一様収束するとき, 収束先の $\varphi(x)$ も $I$ 上の連続函数になる. $\QED$

証明略.

定理: 区間 $I$ 上の函数の列 $f_n(x)$ について,

$$ F_N(x) = \sum_{n=1}^N |f_n(x)| $$

が $I$ 上一様収束するとき, 函数項級数 $\ds\sum_{n=1}^\infty f_n(x)$ も一様収束する. このとき, その函数項級数は一様絶対収束するという. $\QED$

証明略.

注意: 上の定理では収束先の函数が不明であっても収束することがわかる. $\QED$

定理: すべての $f_n(x)$ が区間 $I$ 上の連続函数であり, $\ds\sum_{n=1}^\infty f_n(x)$ が $I$ 上一様絶対収束するならば, その収束先も連続函数になる. $\QED$

証明略.

定理: 区間 $I$ 上の函数の列 $f_n(x)$ に対して, 非負実数列 $c_n$ で

$$ |f_n(x)| \leqq c_n \quad (x\in I), \qquad \sum_{n=1}^\infty c_n < \infty $$

が成立していれば, 函数列

$$ s_N(x) = \sum_{n=1}^N f_n(x) $$

は $I$ 上一様絶対収束する. $\QED$

証明略.

注意: 函数の数値計算で区間 $I$ の点を有限個の点 $x_i\in I$, $x_1<\leqq<x_L$ で代表し, 函数 $f_n(x)$ の代わりに配列 $[f_n(x_1),\ldots,f_n(x_L)]$ を扱うことがよくある. そのとき収束するかどうかの判定を $f_n(x_i)$ と $f_{n+1}(x_i)$ の違いの大きさがすべての $i=1,\ldots,L$ について一斉に最初に決めておいた $\eps>0$ より小さくなったかどうかで判定することは, 一様収束に近い考え方で収束を判定していることになる. $\QED$

問題: $s>1$ の函数 $f_n(s)$ を

$$ f_n(s) = \frac{1}{n^s} $$

と定める. $1$ より真に大きい実数 $a$ を任意に取る. このとき $s\geqq a$ において, 函数項級数

$$ \sum_{n=1}^\infty f_n(s) = \sum_{n=1}^\infty \frac{1}{n^s} $$

が一様絶対収束することを示せ.

解答例: 各 $n\geqq 1$ ごとに $f_n(s)=1/n^s$ は $s$ に関する単調減少函数である. ゆえに

$$ |f_n(s)| =\frac{1}{n^s} \leqq \frac{1}{n^a} \quad (s\geqq a). $$

そして, $a>1$ より $\ds\sum_{n=1}^\infty\frac{1}{n^a}$ は有限の値に収束する. 以上によって, $\ds\sum_{n=1}^\infty f_n(s) = \sum_{n=1}^\infty\frac{1}{n^s}$ は $s\geqq a$ で絶対収束する. $\QED$

注意: 上の問題の $a>1$ はいくらでも $1$ に近付けることができるので,

$$ \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} \quad (s>1) $$

は $s>1$ における連続函数になることがわかる. $\QED$

注意: 実際にはもっとよいことが言える. $\zeta(s)$ は $s>1$ でいくらでも項別微分可能であり, $s=1$ を除いた複素平面全体に解析接続される. $\QED$

In [24]:
g(N, s) = sum(n->1/n^s, 1:N)
s = 1.01:0.01:5.00

p1 = plot(title="sum of 1/n^s for n=1,...,N")
plot!(ylims=(0.8, 5), xlabel="s")
plot!(s, zeta.(s), label="zeta(s)", lw=2)
for N in [3,10,30,100,300,1000]
    plot!(s, g.(N,s), label="N = $N", ls=:dash)
end
plot(p1, size=(500, 350))
Out[24]:
2 3 4 5 1 2 3 4 5 sum of 1/n^s for n=1,...,N s zeta(s) N = 3 N = 10 N = 30 N = 100 N = 300 N = 1000

Peano曲線

以下のプログラムのように $n$ について帰納的に定義された $\leqq t\leqq 1$ の連続函数 $x_n(t)=\mathrm{Peano}\_x(n,t)$ と $y_n(t)=\mathrm{Peano}\_y(n,t)$ は $n\to\infty$ で一様収束し, その収束先 $x(t)$, $y(t)$ は平面上の連続曲線 $(x(t),y(t))$ ($0\leqq t\leqq 1$) を定める. その曲線はPeano曲線と呼ばれており, 正方形 $[0,1]\times [0,1]$ の内側を埋め尽くす.

問題: $x_n(t)$, $y_n(t)$ がともに閉区間 $[0,1]$ 上で一様収束することを示せ.

解答例: $f_n(t)$ は $x_n(t)$ または $y_n(t)$ であるとする. そのとき

$$ |f_n(t) - f_{n-1}(t)| \leqq \frac{1}{2^n} \quad (0\leqq t\leqq 1) $$

となっているので(下の方のプロットを参照せよ), $0\leqq t\leqq 1$ のとき

$$ \sum_{n=1}^\infty |f_n(t)-f_{n-1}(t)| \leqq \sum_{n=1}^\infty \frac{1}{2^n} = 1 < \infty $$

となる. ゆえに函数項級数

$$ f_0(t) + (f_1(t)-f_0(t)) + (f_2(t)-f_1(t)) + (f_3(t) - f_2(t)) + \cdots $$

は閉区間 $[0,1]$ 上で一様絶対収束する. これは $f_n(t)$ が一様収束することを意味する. $\QED$

注意: $0\leqq t\leqq 1$ のとき

$$ f(t) = f_n(t) + \sum_{k=n}^\infty (f_{k+1}(t)-f_k(t)), \quad \sum_{k=n}^\infty |f_{k+1}(t)-f_k(t)| \leqq \sum_{k=n}^\infty\frac{1}{2^{k+1}} = \frac{1}{2^n} $$

なので,

$$ |f_n(t)-f(t)|\leqq \frac{1}{2^n} \quad (0\leqq t\leqq 1) $$

であることもわかる. $\QED$

問題: $x_n(t)$, $y_n(t)$ の極限をそれぞれ $x(t)$, $y(t)$ と書く. そのとき, 任意の正方形上の点 $(a,b)\in[0,1]\times[0,1]$ に対して, ある実数 $t\in[0,1]$ で $(x(t),y(t))=(a,b)$ を満たすものが存在することを示せ.

解答例: $x_n(t)$, $y_n(t)$ の作り方より(下の方のプロットを参照せよ), 任意の正の整数 $n$ に対して, ある $t_n\in[0,1]$ で

$$ |x_n(t_n)-a|\leqq \frac{1}{2^n}, \quad |y_n(t_n)-b|\leqq \frac{1}{2^n} $$

を満たすものが存在する. 数列 $t_n$ は閉区間 $[0,1]$ 上の数列なので, そのある部分列 $t_{n_k}$ ($1\leqq n_1<n_2<\cdots$) で収束するものが存在する. その収束先を $t\in[0,1]$ と書く. 任意に $\eps > 0$ を取る. $x(t)$, $y(t)$ の連続性より, 十分に $k$ を大きくすると

$$ |x(t)-x(t_{n_k})|\leqq\eps, \quad |y(t)-y(t_{n_k})|\leqq\eps. $$

ゆえに, 以上と上の注意の内容を合わせると, $k\to\infty$ で,

$$ \begin{aligned} & |x(t)-a| \leqq |x(t)-x(t_{n_k})| + |x(t_{n_k})-x_{n_k}(t_{n_k})| + |x_{n_k}(t_{n_k})-a| \leqq \eps + \frac{1}{2^{n_k}} + \frac{1}{2^{n_k}} \to \eps, \\& |y(t)-b| \leqq |y(t)-y(t_{n_k})| + |y(t_{n_k})-y_{n_k}(t_{n_k})| + |y_{n_k}(t_{n_k})-b| \leqq \eps + \frac{1}{2^{n_k}} + \frac{1}{2^{n_k}} \to \eps. \end{aligned} $$

$\eps>0$ はいくらでも小さくできるので, $(x(t),y(t))=(a,b)$. $\QED$

In [25]:
peano_x₀(t) = t < 1/2 ? 1/2 : t
peano_y₀(t) = t < 1/2 ? t : 1/2

n = 0
t = 0:1/(2*4^n):1
x = peano_x₀.(t)
y = peano_y₀.(t)
plot(size=(200,200))
plot!(title="Peano($n)", titlefontsize=10)
plot!(xlims=(0,1), ylims=(0,1))
plot!(aspect_ratio=1, legend=:false)
plot!(x, y)
Out[25]:
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Peano(0)
In [26]:
function peano_x(n, t)
    if n == 0
        peano_x₀(t)
    else
        if t < 1/(2*4^n)
            1/(2*2^n)
        elseif t < 1/4
            peano_y(n-1, 4t)/2
        elseif t < 2/4
            peano_x(n-1, 4t-1)/2
        elseif t < 3/4
            (1-peano_x(n-1, 3-4t))/2 + 1/2
        else
            (1-peano_y(n-1, 4-4t))/2 + 1/2
        end
    end
end

function peano_y(n, t)
    if n == 0
        peano_y₀(t)
    else
        if t < 1/(2*4^n)
            2^n*t
        elseif t < 1/4
            peano_x(n-1, 4t)/2
        elseif t < 2/4
            peano_y(n-1, 4t-1)/2 + 1/2
        elseif t < 3/4
            peano_y(n-1, 3-4t)/2 + 1/2
        else
            peano_x(n-1, 4-4t)/2
        end
    end
end

P = Plots.Plot[]
for n in 0:8
    t = 0:1/(2*4^n):1
    x = peano_x.(n,t)
    y = peano_y.(n,t)
    p = plot()
    plot!(title="Peano($n)", titlefontsize=10)
    plot!(xlims=(0,1), ylims=(0,1))
    plot!(aspect_ratio=1, legend=:false)
    plot!(x, y)
    push!(P, p)
end
plot(P..., size=(800,800), layout=@layout(grid(3,3)))
pngplot()