微分法#
微分係数と導関数#
微分係数#
関数\(y=f(x)\)が連続な区間において、\(x\)の変動量\((a+h)-a=h\)と\(y\)の変動量\(f(a+h)-f(a)\)の比(変化率)の極限
が存在するとき、\(f(x)\)は\(x=a\)で 微分可能 といい、\(f'(a)\)を 微分係数 (differential coefficient)という。
例:\(f(x) = x^2\)の微分係数\(f'(a)\)
導関数#
微分係数\(f'(a)\)において、\(a\)は定義域内の任意の点とみなして\(x\)で表すと
\(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\)とおくと
Show 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()
点Qを曲線に沿って点Pに近づけると、\(\Delta x\)は0に近づく。そして\(\Delta x \to 0\)のとき、曲線QPは一定の直線PTに限りなく近づく。この極限における直線PTを、曲線\(f(x)\)の点Pにおける 接線 (tangent)という。曲線\(f(x)\)の接線の傾きを\(\tan \alpha\)と表すと、
すなわち、微分係数\(f'(x)\)は点\(x\)における曲線\(f(x)\)の接線の傾きである。
\(y = f(x) = x^2\)だとすると\(f'(x) = 2x\)
たとえば\(\Delta x = 0.1\)とすると
\(x=1\)の点で
なので
\(x=2\)の点では
となっており、\(f'(x) = 2x\)になっていることが確認できる
Show 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()
微分法の公式#
和と定数倍
微分可能な関数\(f(x), g(x)\)について
積の微分
商の微分
導出
\(g(u) = u^{-1}\)とおくと\(g'(u) = -1 u^{-2}= - \dfrac{1}{u^2}\)なので
商の微分2
import sympy as sp
x = sp.symbols('x')
f = (1 / x) * x**2
sp.diff(f, x)
合成関数の微分
\(y=f(z), z=g(x)\) のとき、 合成関数 \(y=f(g(x))\)の導関数は
逆関数の微分
微分可能な1価単調連続関数\(y = f(x)\)について、逆関数を\(x = f^{-1}(y)\)とすれば
対数の微分
指数関数の微分
証明
\(y = e^x\)とする。\(x=\log y\)であるから、
よって逆関数の公式を利用して
例:\(y = e^{ax}\)
方法1: \(u=ax\)とおいて合成関数として
方法2: \(\log y = ax \to x = \log y / a\)を利用して
よって
例:\(y=a^x\)
まず、自然対数\(\log =\log_e\)で対数をとると、任意の底\(a\)に対して\(\log_a x^y = y \log_a x\)という性質から
逆関数の微分で
n乗の微分
証明(正の整数の指数\(n\)について)
等式
を使って、
証明(任意の指数\(n\)について)
より、
\(y=e^z, z=n\log x\)として合成関数にして連鎖律を使うと
三角関数の微分#
sin x
証明
cos x
証明
tan x
証明
商の公式を使って
arcsin x
証明
\(x=\sin y\)だから、
逆関数の微分法より
arccos x
arctan x
連続と微分可能#
関数が\(x=a\)で不連続なら、微分係数は存在しない
微分可能なら連続である
ただし、逆は必ずしも成立しない。連続であっても微分可能とは限らない
ライプニッツの公式#
積の微分公式を一般化したもの。
ライプニッツの公式(Leibniz rule)
\(n = 1\)のとき、積の微分公式と一致する。
例:連続だが微分不可能な関数
\(f(x)=|x|\)は\(x=0\)で連続(\(\lim_{x\to 0} |x|=0=|0|\))だが、微分可能ではない。
右微分係数と左微分係数は
であり、確定した微分係数\(f'(0)\)は存在しない。そのため、\(f(x)=|x|\)は\(x=0\)で微分可能ではない
Show 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()
対数微分法#
式の両辺の対数をとって微分する方法
\(y=a^x\)の微分をしたいとする。両辺の対数をとって\(\log y = x \log a\)とする。
両辺を\(x\)で微分すると
よって
高次導関数#
導関数\(f'(x)\)が微分可能であれば、その導関数
を考えることができて、これを元の関数\(f(x)\)の 2次導関数 ( 2階導関数 )という。また、このとき\(y=f(x)\)は 2回微分可能 であるという。
一般に\(y=f(x)\)を\(n\)回微分できるとき、得られる関数を\(f(x)\)の \(n\)次導関数 (または \(n\)階導関数 )といい、
などで表す。このとき、\(f(x)\)は \(n\)回微分可能 であるという。
\(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\)次導関数
を微分すると
よって数学的帰納法により、すべての\(n\)で成り立つ。
例(グラフ)#
Show 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()
Show 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()
微分#
微分 (differential) は導関数とはまた別に定義される
関数\(y=f(x)\)に対して、\(x\)の微分\(dx\)と\(y\)の微分\(dy\)は、それぞれ
と定義される。
\(dy\)は\(dx\)に伴う\(y\)の変化\(\Delta y\)を近似的に表すものとして理工学で用いられる(あくまで近似であり、一般には\(dy\)と\(\Delta y\)は一致しない)
ライプニッツの公式#
積の微分公式を一般化したもの。
ライプニッツの公式(Leibniz rule)
\(n = 1\)のとき、積の微分公式と一致する。
\(x^2 e^x\)の\(n\)次導関数\((x^2 e^x)^{(n)}\)は