微分法#

微分係数と導関数#

微分係数#

関数\(y=f(x)\)が連続な区間において、\(x\)の変動量\((a+h)-a=h\)\(y\)の変動量\(f(a+h)-f(a)\)の比(変化率)の極限

\[ f'(a) = \lim_{h\to 0} \frac{f(a + h) - f(a)}{h} \]

が存在するとき、\(f(x)\)\(x=a\)微分可能 といい、\(f'(a)\)微分係数 (differential coefficient)という。

例:\(f(x) = x^2\)の微分係数\(f'(a)\)

\[ f^{\prime}(a)=\lim _{h \rightarrow 0} \frac{(a+h)^2-a^2}{h} =\lim _{h \rightarrow 0} \frac{2 a h+h^2}{h}=\lim _{h \rightarrow 0}(2 a+h)=2 a \]

導関数#

微分係数\(f'(a)\)において、\(a\)は定義域内の任意の点とみなして\(x\)で表すと

\[ f'(x) = \lim_{h\to 0} \frac{ f(x+h) - f(x) }{ h } \]

\(f'(x)\)\(x\)の関数でもあり、\(f(x)\)導関数 (derived function, derivative)と呼ばれる。

微分係数は接線の傾き#

微分係数\(f'(x)\)は点\(x\)における曲線\(f(x)\)の接線の傾きである。

曲線\(y=f(x)\)上の座標\((x,y)\)に点\(P\)をとり、その近くの同曲線上の\((x+\Delta x, y + \Delta y)\)に点\(Q\)をとる。\(Q\)から\(x\)軸への垂線と\(P\)を通って\(x\)軸に平行な線との交点を\(R\)とする。このとき、\(\mathrm{PR}=\Delta x, \mathrm{PR}=\Delta y\)である。

\(\angle \mathrm{QPR}=\theta\)とおくと

\[ \frac{\Delta y}{\Delta x}=\frac{\mathrm{QR}}{\mathrm{PR}}=\tan \theta \]
Hide code cell source
import matplotlib.pyplot as plt
import numpy as np

def f(x):
    return x**2

x = np.linspace(0, 5, 50)

fig, ax = plt.subplots(figsize=[3, 2])
ax.plot(x, f(x), color="dimgray")

P = (2, f(2))
ax.scatter(*P, color="dimgray")
ax.text(*P, " P", color="dimgray", va="bottom", ha="center")

Q = (4, f(4))
ax.scatter(*Q, color="dimgray")
ax.text(*Q, " Q", color="dimgray")

R = (Q[0], P[1])
ax.scatter(*R, color="dimgray")
ax.text(*R, " R", color="dimgray")
ax.axvline(R[0], color="dimgray", linestyle=":")
ax.axhline(R[1], color="dimgray", linestyle=":")

ax.set(xlabel="x", ylabel="y")
fig.show()
../../../_images/d12bd93cd64f1ba984f3f499cfc6a35715277af99764fec126c6a9fe516351b0.png

点Qを曲線に沿って点Pに近づけると、\(\Delta x\)は0に近づく。そして\(\Delta x \to 0\)のとき、曲線QPは一定の直線PTに限りなく近づく。この極限における直線PTを、曲線\(f(x)\)の点Pにおける 接線 (tangent)という。曲線\(f(x)\)の接線の傾きを\(\tan \alpha\)と表すと、

\[ f^{\prime}(x) = \lim_{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x} =\tan \alpha \]

すなわち、微分係数\(f'(x)\)は点\(x\)における曲線\(f(x)\)の接線の傾きである。

\(y = f(x) = x^2\)だとすると\(f'(x) = 2x\)

たとえば\(\Delta x = 0.1\)とすると

\(x=1\)の点で

\[\begin{split} f(x) = 1^2 = 1\\ f(x + \Delta x) = 1.1^2 = 1.21\\ \to \Delta y = 0.21 \end{split}\]

なので

\[ \frac{\Delta y}{\Delta x} = \frac{0.21}{0.10} \approx 2 \]

\(x=2\)の点では

\[\begin{split} f(x) = 2^2 = 4\\ f(x + \Delta x) = 2.1^2 = 4.41\\ \to \Delta y = 0.41 \to \frac{\Delta y}{\Delta x} = \frac{0.41}{0.10} \approx 4 \end{split}\]

となっており、\(f'(x) = 2x\)になっていることが確認できる

Hide code cell source
def f_prime(x):
    return 2 * x

fig, axes = plt.subplots(figsize=[4, 3], nrows=2, sharex=True)
x = np.linspace(0, 2.2, 50)
axes[0].plot(x, f(x), label="f(x)")
axes[0].set(ylabel="f(x)")
axes[0].grid(True)

axes[1].plot(x, f_prime(x), label="f'(x)")
axes[1].set(ylabel="f'(x)")
axes[1].grid(True)
fig.show()
../../../_images/c9008bfbc578e1dc75a11ae803c19b5c226f37da21e79157b68ab7c0da2b79ea.png

微分法の公式#

和と定数倍

微分可能な関数\(f(x), g(x)\)について

\[\begin{split} \begin{aligned} & (f \pm g)^{\prime}=f^{\prime} \pm g^{\prime} \\ & (k f)^{\prime}=k f^{\prime} \quad(k: \text { 定数 }) \end{aligned} \end{split}\]

積の微分

\[ \{f(x) g(x)\}' = f'(x) g(x) + f(x) g'(x) \]

商の微分

\[ \left\{ \frac{1}{f(x)} \right\}' = -\frac{f'(x)}{[f(x)]^2} ,\ (f(x) \neq 0) \]
導出
\[ \left\{ \frac{1}{f(x)} \right\}' = \{ f(x)^{-1} \}' \]

\(g(u) = u^{-1}\)とおくと\(g'(u) = -1 u^{-2}= - \dfrac{1}{u^2}\)なので

\[\begin{split} \{ f(x)^{-1} \}' = \frac{d g(u)}{d u} \frac{d f(x)}{d x}\\ = - \frac{1}{[ f(x)] ^2} f'(x) \end{split}\]

商の微分2

\[ \left\{ \frac{f(x)}{g(x)} \right\}' = \frac{f'(x)g(x) - f(x) g'(x)}{[g(x)]^2} ,\ (g(x) \neq 0) \]
import sympy as sp
x = sp.symbols('x')
f = (1 / x) * x**2

sp.diff(f, x)
\[\displaystyle 1\]

合成関数の微分

\(y=f(z), z=g(x)\) のとき、 合成関数 \(y=f(g(x))\)の導関数は

\[ \frac{d y}{d x}=\frac{d y}{d z} \frac{d z}{d x}=f^{\prime}(z) \frac{d z}{d x}=f^{\prime}(g(x)) g^{\prime}(x) \]

逆関数の微分

微分可能な1価単調連続関数\(y = f(x)\)について、逆関数を\(x = f^{-1}(y)\)とすれば

\[ \frac{d x}{d y}=1 / \frac{d y}{d x} \quad\left(\frac{d y}{d x} \neq 0 \text { のとき }\right) \]

対数の微分

\[ (\log |x|)' = \frac{1}{x} (x \neq 0) \]

指数関数の微分

\[ (e^x)' = e^x \]
証明

\(y = e^x\)とする。\(x=\log y\)であるから、

\[ \frac{dx}{dy} = \frac{1}{y} \]

よって逆関数の公式を利用して

\[ \frac{d}{dx} e^x = \frac{dy}{dx} = 1 \big/ \frac{dx}{dy} = y = e^x \]

例:\(y = e^{ax}\)

方法1: \(u=ax\)とおいて合成関数として

\[ \frac{ d e^{u} }{ d u } \frac{ d ax }{ dx } = e^{ax} a = a e^{ax} \]

方法2: \(\log y = ax \to x = \log y / a\)を利用して

\[\begin{split} \frac{ d x }{ dy } = \frac{ d (\log y / a) }{ dy } = \frac{ a (1/y) - \log y \cdot 0 }{ a^2 } = \frac{ 1/y }{ a }\\ \end{split}\]

よって

\[ \frac{d}{dx} e^{ax} = 1 \big/ \frac{dx}{dy} = \frac{ a }{ 1/y } = ay = a e^{ax} \]

例:\(y=a^x\)

まず、自然対数\(\log =\log_e\)で対数をとると、任意の底\(a\)に対して\(\log_a x^y = y \log_a x\)という性質から

\[ \log y = \log a^x = x \log a \]
\[ \to x = \frac{\log y}{\log a} \]
\[\begin{split} \frac{dx}{dy} = \left( \frac{1}{\log a} \log y \right)'\\ = \frac{1}{\log a} \frac{1}{y}\\ = \frac{1}{y \log a}\\ \end{split}\]

逆関数の微分で

\[\begin{split} \frac{dy}{dx} = 1 / \frac{dx}{dy} = y \log a\\ = a^x \log a \end{split}\]

n乗の微分

\[ (x^n)' = n x^{n-1} \]
証明(正の整数の指数\(n\)について)

等式

\[ a^n-b^n=(a-b)\left(a^{n-1}+a^{n-2} b+a^{n-3} b^2+\cdots+a b^{n-2}+b^{n-1}\right) \]

を使って、

\[\begin{split} \begin{aligned} \frac{d}{d x} x^n &= \lim _{h \rightarrow 0} \frac{(x+h)^n-x^n}{h} \\ &= \lim _{h \rightarrow 0} \frac{ \{(x+h) - x\} \left\{(x+h)^{n-1}+(x+h)^{n-2} x+\cdots+(x+h) x^{n-2}+x^{n-1}\right\} }{h} \\ &= \lim _{h \rightarrow 0} \left\{(x+h)^{n-1}+(x+h)^{n-2} x+\cdots+(x+h) x^{n-2}+x^{n-1}\right\}\\ &= n x^{n-1} \end{aligned} \end{split}\]
証明(任意の指数\(n\)について)
\[ a^m = M \Longleftrightarrow m = \log_a M \]

より、

\[ y = x^n \Longleftrightarrow y = e^{n \log_e x} \]

\(y=e^z, z=n\log x\)として合成関数にして連鎖律を使うと

\[ \frac{d}{dx} x^n = \frac{dy}{dx} = \frac{dy}{dz} \frac{dz}{dx} = e^z \frac{n}{x} = x^n \frac{n}{x} = n \cdot x^n \cdot x^{-1} = n x^{n-1} \]

三角関数の微分#

sin x

\[ \begin{aligned} \frac{d}{d x} \sin x = \cos x \end{aligned} \]
証明
\[\begin{split} \begin{aligned} \frac{d}{d x} \sin x &=\lim _{h \rightarrow 0} \frac{\sin (x+h)-\sin x}{h}\\ &=\lim _{h \rightarrow 0} \frac{2 \cos (x+h / 2) \sin (h / 2)}{h} \\ & =\lim _{h \rightarrow 0} \cos \left(x+\frac{h}{2}\right) \cdot \lim _{h \rightarrow 0} \frac{\sin (h / 2)}{h / 2}\\ &=\cos x \end{aligned} \end{split}\]

cos x

\[ \frac{d}{d x} \cos x =-\sin x \]
証明
\[\begin{split} \begin{aligned} \frac{d}{d x} \cos x &=\lim _{h \rightarrow 0} \frac{\cos (x+h)-\cos x}{h}\\ &=\lim _{h \rightarrow 0} \frac{-2 \sin (x+h / 2) \sin (h / 2)}{h}\\ &=-\lim _{h \rightarrow 0} \sin \left(x+\frac{h}{2}\right) \cdot \lim _{h \rightarrow 0} \frac{\sin (h / 2)}{h / 2}\\ &=-\sin x \end{aligned} \end{split}\]

tan x

\[ \begin{aligned} \frac{d}{d x} \tan x & = \frac{1}{\cos ^2 x} \end{aligned} \]
証明

商の公式を使って

\[\begin{split} \begin{aligned} \frac{d}{d x} \tan x &=\frac{d}{d x}\left(\frac{\sin x}{\cos x}\right)\\ &=\frac{(\sin x)^{\prime} \cos x-\sin x(\cos x)^{\prime}}{\cos ^2 x}\\ &=\frac{\cos x \cos x-\sin x(-\sin x)}{\cos ^2 x}\\ &=\frac{1}{\cos ^2 x} \end{aligned} \end{split}\]

arcsin x

\[ \frac{d}{d x} \arcsin x = \frac{1}{\sqrt{1 - x^2}} \]
証明

\(x=\sin y\)だから、

\[ \frac{d x}{d y}=\cos y \]

逆関数の微分法より

\[\begin{split} \begin{aligned} \frac{d}{d x} \arcsin x & =\frac{d y}{d x}=1 / \frac{d x}{d y}=\frac{1}{\cos y}=\frac{1}{\sqrt{1-\sin ^2 y}} \\ & =\frac{1}{\sqrt{1-x^2}} \quad(x \neq \pm 1) \end{aligned} \end{split}\]

arccos x

\[ \frac{d}{d x} \arccos x = -\frac{1}{\sqrt{1 - x^2}} \]

arctan x

\[ \frac{d}{d x} \arctan x = \frac{1}{1+x^2} \]

連続と微分可能#

  1. 関数が\(x=a\)で不連続なら、微分係数は存在しない

  2. 微分可能なら連続である

    • ただし、逆は必ずしも成立しない。連続であっても微分可能とは限らない

ライプニッツの公式#

積の微分公式を一般化したもの。

ライプニッツの公式(Leibniz rule)

\[ (f g)^{(n)}=\sum_{k=0}^n{ }_n \mathrm{C}_k f^{(k)} g^{(n-k)} \]

\(n = 1\)のとき、積の微分公式と一致する。

\[\begin{split} (f g)' = \sum_{k=0}^1{ }_1 \mathrm{C}_k f^{(k)} g^{(1-k)}\\ = f g' + f' g \end{split}\]
例:\((x^2 e^2)^{(n)}\)

例:連続だが微分不可能な関数

\(f(x)=|x|\)\(x=0\)で連続(\(\lim_{x\to 0} |x|=0=|0|\))だが、微分可能ではない。

右微分係数と左微分係数は

\[\begin{split} \begin{aligned} & f^{\prime}(+0)=\lim _{h \rightarrow+0} \frac{|h+0|-|0|}{h}=\lim _{h \rightarrow+0} \frac{h}{h}=1 \\ & f^{\prime}(-0)=\lim _{h \rightarrow-0} \frac{|h+0|-|0|}{h}=\lim _{h \rightarrow-0} \frac{-h}{h}=-1 \end{aligned} \end{split}\]

であり、確定した微分係数\(f'(0)\)は存在しない。そのため、\(f(x)=|x|\)\(x=0\)で微分可能ではない

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

x = np.linspace(-3, 3, 100)

fig, ax = plt.subplots(figsize=[4,2])
ax.plot(x, abs(x))
ax.set(xlabel="$x$", ylabel=r"$y=|x|$", title=r"$f(x)=|x|$")
fig.show()
../../../_images/d66c2ffcddd88057de8f1b1ed42ffc965188474efcdf9915094d4cb3a841d2f2.png

対数微分法#

式の両辺の対数をとって微分する方法

\(y=a^x\)の微分をしたいとする。両辺の対数をとって\(\log y = x \log a\)とする。

両辺を\(x\)で微分すると

\[ \frac{1}{y} \frac{d y}{d x}=\log a \]

よって

\[ \frac{d y}{d x}=y \log a=a^x \log a \]

高次導関数#

導関数\(f'(x)\)が微分可能であれば、その導関数

\[ f^{\prime \prime}(x)=\left\{f^{\prime}(x)\right\}^{\prime}=\lim _{h \rightarrow 0} \frac{f^{\prime}(x+h)-f^{\prime}(x)}{h} \]

を考えることができて、これを元の関数\(f(x)\)2次導関数2階導関数 )という。また、このとき\(y=f(x)\)2回微分可能 であるという。

一般に\(y=f(x)\)\(n\)回微分できるとき、得られる関数を\(f(x)\)\(n\)次導関数 (または \(n\)階導関数 )といい、

\[ y^{(n)}(x), \quad f^{(n)}(x), \frac{d^n y}{d x^n}, \frac{d^n}{d x^n} f(x) \]

などで表す。このとき、\(f(x)\)\(n\)回微分可能 であるという。

例:\(y=x^a\)\(a\)は自然数でない定数)
\[\begin{split} \begin{align} y' &= a x ^{a-1}\\ y'' &= a(a-1) x ^{a-2}\\ &\vdots\\ y^{(n)} &= a(a-1) \cdots (a-n+1) x^{a-n}\\ \end{align} \end{split}\]
\(\sin(x)\)

\(y=\sin x\)\(n\) 次導関数は \(y^{(n)}=\sin \left(x+\frac{n}{2} \pi\right)\) である。

証明:

\(n=1\)では\(y' = \cos x = \sin(x + \pi / 2)\)で成り立つ。

\(n=k\)まで成り立っているとする。\(k\)次導関数

\[ y^{(k)}=\sin \left(x+\frac{k}{2} \pi\right) \]

を微分すると

\[ y^{(k+1)}=\sin \left(x+\frac{k+1}{2} \pi\right) \]

よって数学的帰納法により、すべての\(n\)で成り立つ。

例(グラフ)#

Hide code cell source
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
import numdifftools as nd

def f(x):
    return x**2

df = nd.Derivative(f, n=1)
ddf = nd.Derivative(f, n=2)

fig, axes = plt.subplots(figsize=[6, 6], nrows=3, sharex=True)
x = np.linspace(-3, 3, 100)
axes[0].plot(x, [f(x_i) for x_i in x])
axes[0].set(ylabel=r"$f(x)$", title=r"$y = f(x) = x^2$")

axes[1].plot(x, df(x).tolist())
axes[1].set(ylabel=r"$f'(x)$")

axes[2].plot(x, ddf(x).tolist())
axes[2].set(ylabel=r"$f''(x)$")
axes[2].yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.1f}"))

fig.show()
../../../_images/cec888b26532f19ad5b7a204e9e17f4686282a82f52ad065d0675ff096707bae.png
Hide code cell source
import numpy as np
import matplotlib.pyplot as plt
import numdifftools as nd

def f(x):
    return np.sin(x)

df = nd.Derivative(f, n=1)
ddf = nd.Derivative(f, n=2)

fig, axes = plt.subplots(figsize=[6, 6], nrows=3, sharex=True)
x = np.linspace(-6, 6, 100)
axes[0].plot(x, [f(x_i) for x_i in x])
axes[0].set(ylabel=r"$f(x)$", title=r"$y = f(x) = \sin(x)$")

axes[1].plot(x, df(x).tolist())
axes[1].set(ylabel=r"$f'(x)$")

axes[2].plot(x, ddf(x).tolist())
axes[2].set(ylabel=r"$f''(x)$")

fig.show()
../../../_images/a7fe4f2a19cb400f2dac8ca23966bfabe1d4fde3048742facf0207b8df414fb4.png

memo: 数値微分はapprox_fprimeよりnumpdifftoolsの方が良い様子#

scipyのapprox_fprimeを再帰的に適用することで無理やり2階微分をするとギザギザした導関数になる

Hide code cell source
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import approx_fprime

EPSILON = np.sqrt(np.finfo(float).eps)

def f(x):
    """微分したい対象の関数"""
    return np.sin(x)

def df(x):
    """1次の導関数"""
    return approx_fprime(x, f=f, epsilon=EPSILON)[0]

def ddf(x):
    """2次の導関数"""
    return approx_fprime(x, f=df, epsilon=EPSILON)[0]


fig, axes = plt.subplots(figsize=[6, 6], nrows=3, sharex=True)
x = np.linspace(-6, 6, 100)
axes[0].plot(x, [f(x_i) for x_i in x])
axes[0].set(ylabel=r"$f(x)$", title=r"$y = f(x) = \sin(x)$")

axes[1].plot(x, [df(x_i) for x_i in x])
axes[1].set(ylabel=r"$f'(x)$")

axes[2].plot(x, [ddf(x_i) for x_i in x])
axes[2].set(ylabel=r"$f''(x)$")

fig.show()
../../../_images/79066c231edb2721591a779420277109311650be6abd06a2d289e70a3f420f85.png

微分#

微分 (differential) は導関数とはまた別に定義される

関数\(y=f(x)\)に対して、\(x\)の微分\(dx\)\(y\)の微分\(dy\)は、それぞれ

\[\begin{split} \begin{align} dx &= \Delta x\\ dy &= f'(x) dx \end{align} \end{split}\]

と定義される。

\(dy\)\(dx\)に伴う\(y\)の変化\(\Delta y\)を近似的に表すものとして理工学で用いられる(あくまで近似であり、一般には\(dy\)\(\Delta y\)は一致しない)

ライプニッツの公式#

積の微分公式を一般化したもの。

ライプニッツの公式(Leibniz rule)

\[ (f g)^{(n)}=\sum_{k=0}^n{ }_n \mathrm{C}_k f^{(k)} g^{(n-k)} \]

\(n = 1\)のとき、積の微分公式と一致する。

\[\begin{split} (f g)' = \sum_{k=0}^1{ }_1 \mathrm{C}_k f^{(k)} g^{(1-k)}\\ = f g' + f' g \end{split}\]
例:\((x^2 e^x)^{(n)}\)

\(x^2 e^x\)\(n\)次導関数\((x^2 e^x)^{(n)}\)

\[\begin{split} \begin{align} (x^2 e^x)^{(n)} &= \sum_{k=0}^n { }_n C_k (x^2)^{(k)} (e^x)^{(n-k)}\\ &= { }_n C_0 (x^2)^{(0)} (e^x)^{(n-0)}\\ &\quad+ { }_n C_1 (x^2)^{(1)} (e^x)^{(n-1)}\\ &\quad+ { }_n C_2 (x^2)^{(2)} (e^x)^{(n-2)}\\ &\quad+ { }_n C_3 (x^3)^{(3)} (e^x)^{(n-3)}\\ &\quad+ \cdots \\ &= \frac{n!}{0!(n-0)!} x^2 e^x\\ &\quad + \frac{n!}{1!(n-1)!} 2x e^x\\ &\quad + \frac{n!}{2!(n-2)!} 2 e^x\\ &\quad (\because x^2 \text{ の 3階以上の微分は定数の微分になりゼロのため、以降の項は消える}) \\ &= \frac{n}{n} x^2 e^x\\ &\quad + \frac{n}{1} 2x e^x\\ &\quad + \frac{n (n-1)}{2} 2 e^x \\ &= x^2 e^x + 2nx e^x + n(n-1) e^x \\ &= e^x \{ x^2 + 2nx + n(n-1) \} \end{align} \end{split}\]