微分の基本公式を学んだ後、「$\arcsin x$ や $\ln x$ の微分はどうやって導出するのか?」という疑問に直面します。これらは逆関数の微分を使って求められます。逆関数の微分公式は、微積分の基本的なツールであり、多くの重要な公式の導出に不可欠です。
逆関数の微分は、逆三角関数の微分、対数微分法、陰関数の微分など、さまざまな場面で活躍します。本記事では、逆関数の微分公式を導出し、その応用として逆三角関数の微分を求め、Pythonで幾何学的な意味を可視化します。
本記事の内容
- 逆関数の定義と存在条件
- 逆関数の微分公式の導出
- 逆三角関数($\arcsin$, $\arccos$, $\arctan$)の微分
- 対数関数の微分(逆関数として)
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
逆関数とは
関数 $y = f(x)$ の 逆関数 とは、$x$ と $y$ の関係を逆にした関数 $x = f^{-1}(y)$ のことです。
定義
関数 $f: A \to B$ が 全単射(1対1かつ上への写像)であるとき、逆関数 $f^{-1}: B \to A$ が存在し、次を満たします:
$$ \begin{equation} f^{-1}(f(x)) = x \quad (\forall x \in A), \qquad f(f^{-1}(y)) = y \quad (\forall y \in B) \end{equation} $$
逆関数の存在条件
関数 $f$ が 狭義単調(狭義単調増加または狭義単調減少)であれば、$f$ は1対1なので逆関数が存在します。
幾何学的な意味: 逆関数のグラフは、元の関数のグラフを直線 $y = x$ に関して対称に折り返したものです。
逆関数の微分公式
定理
$f$ が区間 $I$ 上で微分可能かつ狭義単調で、$f'(x) \neq 0$ ならば、逆関数 $f^{-1}$ も微分可能で:
$$ \begin{equation} (f^{-1})'(y) = \frac{1}{f'(x)} = \frac{1}{f'(f^{-1}(y))} \end{equation} $$
あるいは、$y = f(x)$ のとき:
$$ \begin{equation} \frac{dx}{dy} = \frac{1}{\dfrac{dy}{dx}} \end{equation} $$
導出
$f(f^{-1}(y)) = y$ の両辺を $y$ で微分します。連鎖律(合成関数の微分)を適用すると:
$$ \begin{align} \frac{d}{dy} f(f^{-1}(y)) &= \frac{d}{dy} y \\ f'(f^{-1}(y)) \cdot (f^{-1})'(y) &= 1 \end{align} $$
$f'(f^{-1}(y)) \neq 0$ なので両辺を $f'(f^{-1}(y))$ で割って:
$$ \begin{equation} (f^{-1})'(y) = \frac{1}{f'(f^{-1}(y))} \end{equation} $$
$\square$
幾何学的な解釈
逆関数のグラフは元の関数のグラフを $y = x$ で反転したものです。点 $(a, b)$ での接線の傾きが $m$ なら、反転した点 $(b, a)$ での接線の傾きは $1/m$ になります。これが $(f^{-1})'(b) = 1/f'(a)$ に対応しています。
逆三角関数の微分
$\arcsin x$ の微分
$y = \arcsin x$ とすると $x = \sin y$($-\pi/2 \leq y \leq \pi/2$)です。
逆関数の微分公式を適用します:
$$ \begin{align} \frac{dy}{dx} &= \frac{1}{\dfrac{dx}{dy}} = \frac{1}{\cos y} \end{align} $$
ここで $\cos y$ を $x$ で表します。$\sin^2 y + \cos^2 y = 1$ より:
$$ \cos y = \sqrt{1 – \sin^2 y} = \sqrt{1 – x^2} $$
($-\pi/2 \leq y \leq \pi/2$ では $\cos y \geq 0$ なので正の平方根をとる)
よって:
$$ \begin{equation} \frac{d}{dx} \arcsin x = \frac{1}{\sqrt{1 – x^2}} \quad (|x| < 1) \end{equation} $$
$\arccos x$ の微分
$y = \arccos x$ とすると $x = \cos y$($0 \leq y \leq \pi$)です。
$$ \begin{align} \frac{dy}{dx} &= \frac{1}{-\sin y} = \frac{-1}{\sqrt{1 – \cos^2 y}} = \frac{-1}{\sqrt{1 – x^2}} \end{align} $$
($0 \leq y \leq \pi$ では $\sin y \geq 0$)
$$ \begin{equation} \frac{d}{dx} \arccos x = \frac{-1}{\sqrt{1 – x^2}} \quad (|x| < 1) \end{equation} $$
補足: $\arcsin x + \arccos x = \pi/2$ なので、微分すると確かに符号が反転します。
$\arctan x$ の微分
$y = \arctan x$ とすると $x = \tan y$($-\pi/2 < y < \pi/2$)です。
$$ \begin{align} \frac{dy}{dx} &= \frac{1}{\dfrac{dx}{dy}} = \frac{1}{\sec^2 y} = \frac{1}{1 + \tan^2 y} = \frac{1}{1 + x^2} \end{align} $$
($\sec^2 y = 1 + \tan^2 y$ を使用)
$$ \begin{equation} \frac{d}{dx} \arctan x = \frac{1}{1 + x^2} \end{equation} $$
まとめ表
| 関数 | 微分 | 定義域 |
|---|---|---|
| $\arcsin x$ | $\dfrac{1}{\sqrt{1-x^2}}$ | $\|x\| < 1$ |
| $\arccos x$ | $\dfrac{-1}{\sqrt{1-x^2}}$ | $\|x\| < 1$ |
| $\arctan x$ | $\dfrac{1}{1+x^2}$ | $x \in \mathbb{R}$ |
対数関数の微分(逆関数として)
$y = \ln x$ は $x = e^y$ の逆関数です。逆関数の微分公式を適用すると:
$$ \begin{align} \frac{dy}{dx} &= \frac{1}{\dfrac{dx}{dy}} = \frac{1}{e^y} = \frac{1}{x} \end{align} $$
$$ \begin{equation} \frac{d}{dx} \ln x = \frac{1}{x} \quad (x > 0) \end{equation} $$
一般の底の対数 $\log_a x = \frac{\ln x}{\ln a}$ については:
$$ \frac{d}{dx} \log_a x = \frac{1}{x \ln a} $$
具体例
例1: $f(x) = x^3$ の逆関数 $f^{-1}(x) = x^{1/3}$ の微分
$f'(x) = 3x^2$ なので:
$$ (f^{-1})'(y) = \frac{1}{f'(f^{-1}(y))} = \frac{1}{3(y^{1/3})^2} = \frac{1}{3y^{2/3}} = \frac{1}{3} y^{-2/3} $$
これは通常のべき乗の微分 $\frac{d}{dy} y^{1/3} = \frac{1}{3} y^{-2/3}$ と一致します。
例2: $\frac{d}{dx} \arctan(3x)$ を求める
連鎖律と逆関数の微分を組み合わせます:
$$ \frac{d}{dx} \arctan(3x) = \frac{1}{1 + (3x)^2} \cdot 3 = \frac{3}{1 + 9x^2} $$
例3: $\frac{d}{dx} \arcsin(x^2)$ を求める
$$ \frac{d}{dx} \arcsin(x^2) = \frac{1}{\sqrt{1 – (x^2)^2}} \cdot 2x = \frac{2x}{\sqrt{1 – x^4}} $$
Pythonでの実装
逆関数と元の関数のグラフ
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(18, 6))
# 1. sin と arcsin
x1 = np.linspace(-np.pi/2, np.pi/2, 200)
y1 = np.sin(x1)
x1_inv = np.linspace(-1, 1, 200)
y1_inv = np.arcsin(x1_inv)
axes[0].plot(x1, y1, 'b-', linewidth=2, label=r'$y = \sin x$')
axes[0].plot(x1_inv, y1_inv, 'r-', linewidth=2, label=r'$y = \arcsin x$')
axes[0].plot([-2, 2], [-2, 2], 'k--', alpha=0.3, label=r'$y = x$')
axes[0].set_xlim(-2, 2)
axes[0].set_ylim(-2, 2)
axes[0].set_aspect('equal')
axes[0].set_xlabel('x', fontsize=12)
axes[0].set_ylabel('y', fontsize=12)
axes[0].set_title(r'$\sin$ と $\arcsin$', fontsize=14)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
# 2. tan と arctan
x2 = np.linspace(-np.pi/2 + 0.1, np.pi/2 - 0.1, 200)
y2 = np.tan(x2)
x2_inv = np.linspace(-5, 5, 200)
y2_inv = np.arctan(x2_inv)
axes[1].plot(x2, y2, 'b-', linewidth=2, label=r'$y = \tan x$')
axes[1].plot(x2_inv, y2_inv, 'r-', linewidth=2, label=r'$y = \arctan x$')
axes[1].plot([-5, 5], [-5, 5], 'k--', alpha=0.3, label=r'$y = x$')
axes[1].set_xlim(-5, 5)
axes[1].set_ylim(-5, 5)
axes[1].set_aspect('equal')
axes[1].set_xlabel('x', fontsize=12)
axes[1].set_ylabel('y', fontsize=12)
axes[1].set_title(r'$\tan$ と $\arctan$', fontsize=14)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
# 3. exp と ln
x3 = np.linspace(-2, 2, 200)
y3 = np.exp(x3)
x3_inv = np.linspace(0.01, 8, 200)
y3_inv = np.log(x3_inv)
axes[2].plot(x3, y3, 'b-', linewidth=2, label=r'$y = e^x$')
axes[2].plot(x3_inv, y3_inv, 'r-', linewidth=2, label=r'$y = \ln x$')
axes[2].plot([-2, 8], [-2, 8], 'k--', alpha=0.3, label=r'$y = x$')
axes[2].set_xlim(-2, 8)
axes[2].set_ylim(-2, 8)
axes[2].set_aspect('equal')
axes[2].set_xlabel('x', fontsize=12)
axes[2].set_ylabel('y', fontsize=12)
axes[2].set_title(r'$e^x$ と $\ln x$', fontsize=14)
axes[2].legend(fontsize=10)
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
逆関数の微分の検証
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
x = np.linspace(-0.99, 0.99, 500)
# 1. arcsin の微分
y_arcsin = np.arcsin(x)
dy_arcsin = 1 / np.sqrt(1 - x**2)
# 数値微分との比較
dx = 1e-7
dy_numerical = (np.arcsin(x + dx) - np.arcsin(x - dx)) / (2 * dx)
axes[0].plot(x, dy_arcsin, 'b-', linewidth=2, label=r'$\frac{1}{\sqrt{1-x^2}}$ (解析)')
axes[0].plot(x, dy_numerical, 'r--', linewidth=2, label='数値微分')
axes[0].set_xlabel('x', fontsize=12)
axes[0].set_ylabel("f'(x)", fontsize=12)
axes[0].set_title(r"$(\arcsin x)' = \frac{1}{\sqrt{1-x^2}}$", fontsize=14)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim(0, 10)
# 2. arccos の微分
dy_arccos = -1 / np.sqrt(1 - x**2)
dy_numerical2 = (np.arccos(x + dx) - np.arccos(x - dx)) / (2 * dx)
axes[1].plot(x, dy_arccos, 'b-', linewidth=2, label=r'$\frac{-1}{\sqrt{1-x^2}}$ (解析)')
axes[1].plot(x, dy_numerical2, 'r--', linewidth=2, label='数値微分')
axes[1].set_xlabel('x', fontsize=12)
axes[1].set_ylabel("f'(x)", fontsize=12)
axes[1].set_title(r"$(\arccos x)' = \frac{-1}{\sqrt{1-x^2}}$", fontsize=14)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(-10, 0)
# 3. arctan の微分
x2 = np.linspace(-5, 5, 500)
dy_arctan = 1 / (1 + x2**2)
dy_numerical3 = (np.arctan(x2 + dx) - np.arctan(x2 - dx)) / (2 * dx)
axes[2].plot(x2, dy_arctan, 'b-', linewidth=2, label=r'$\frac{1}{1+x^2}$ (解析)')
axes[2].plot(x2, dy_numerical3, 'r--', linewidth=2, label='数値微分')
axes[2].set_xlabel('x', fontsize=12)
axes[2].set_ylabel("f'(x)", fontsize=12)
axes[2].set_title(r"$(\arctan x)' = \frac{1}{1+x^2}$", fontsize=14)
axes[2].legend(fontsize=10)
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
接線の傾きの逆数の関係
import numpy as np
import matplotlib.pyplot as plt
# f(x) = x^3 と f^{-1}(x) = x^{1/3}
# 点 (a, a^3) での接線と、点 (a^3, a) での接線
a = 1.5
f_a = a**3 # = 3.375
slope_f = 3 * a**2 # f'(a) = 3 * 2.25 = 6.75
slope_inv = 1 / slope_f # (f^{-1})'(f(a)) = 1/6.75
x = np.linspace(0, 4, 300)
fig, ax = plt.subplots(figsize=(8, 8))
# 関数と逆関数
ax.plot(x, x**3, 'b-', linewidth=2, label=r'$f(x) = x^3$')
x_pos = x[x >= 0]
ax.plot(x_pos**3, x_pos, 'r-', linewidth=2, label=r'$f^{-1}(x) = x^{1/3}$')
ax.plot([0, 4], [0, 4], 'k--', alpha=0.3, label=r'$y = x$')
# f の接線
tangent_x = np.linspace(a - 0.5, a + 0.5, 100)
tangent_y = f_a + slope_f * (tangent_x - a)
ax.plot(tangent_x, tangent_y, 'b--', linewidth=2, alpha=0.7)
ax.plot(a, f_a, 'bo', markersize=10)
ax.annotate(f'傾き = {slope_f:.2f}', xy=(a + 0.1, f_a + 1), fontsize=11, color='blue')
# f^{-1} の接線
tangent_x2 = np.linspace(f_a - 2, f_a + 2, 100)
tangent_y2 = a + slope_inv * (tangent_x2 - f_a)
ax.plot(tangent_x2, tangent_y2, 'r--', linewidth=2, alpha=0.7)
ax.plot(f_a, a, 'ro', markersize=10)
ax.annotate(f'傾き = {slope_inv:.4f} = 1/{slope_f:.2f}',
xy=(f_a + 0.1, a + 0.3), fontsize=11, color='red')
ax.set_xlim(0, 4)
ax.set_ylim(0, 4)
ax.set_aspect('equal')
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_title('逆関数の微分: 接線の傾きの逆数', fontsize=14)
ax.legend(fontsize=11, loc='upper left')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
まとめ
本記事では、逆関数の微分公式を導出し、その応用を解説しました。
- 逆関数の微分公式: $(f^{-1})'(y) = \frac{1}{f'(f^{-1}(y))}$、すなわち $\frac{dx}{dy} = \frac{1}{dy/dx}$
- 幾何学的には、接線の傾きが逆数になる
- 逆三角関数の微分: $\arcsin x$, $\arccos x$, $\arctan x$ の微分を逆関数の公式で導出
- 対数関数の微分: $(\ln x)’ = 1/x$ も逆関数の微分から得られる
- 逆関数の微分が使えるのは $f'(x) \neq 0$ のときに限る
次のステップとして、以下の記事も参考にしてください。
- 高階微分とライプニッツの公式 — 微分の発展
- 置換積分法 — 逆関数の微分を積分に応用