指数関数の逆関数として定義される対数関数について

# はじめに
指数関数は対数関数と比較してイメージしやすい。例えば、$2^n$は1に2を$n$回(0回も含む)を掛けた数だからである。このように、指数関数の値の急激な変化はイメージできずとも指数関数自体をある程度理解することは難しくない。しかし、対数関数は難しい。
そこで、今回は対数関数に苦手意識を持っている受験生や高校生に対数関数は指数関数の逆関数で定義されることを起点にして対数関数の各公式を導出して理解を深めることを目的とする。ただし、今回の記事は対数関数に苦手意識を持つ学生さん向けの記事のため厳密性よりもイメージや理解しやすさを優先した。


![指数関数と逆関数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/37ca3167-24a9-4acd-a716-155acaff0a1c.png)


# 逆関数
曲線$y=f(x)$を$y=x$に対して対称移動した曲線の方程式を求めたい。

点A$(x,y)$を$y=x$に対して対称移動させることをまずは考える。

移動後の点B$(x_1,y_1)$の中点は$y=x$上にあるので、

```math
\frac{y+y_1}{2}=\frac{x+x_1}{2}
```

一方で、直線ABは$y=x$と垂直なので、

```math
\frac{y_1-y}{x_1-x}=-1
```

これを解くと$(x_1,y_1)=(y,x)$となる。

したがって、題意を満たす曲線の方程式は、$x=f(y)$となる。これを、$y=f(x)$に対する逆関数という。

# 対数関数の定義
ここで、対数関数を指数関数$y=a^x$(ただし$a\ge 0$かつ$a\ne 1$)の逆関数と定義する。ここで、$a$は底と呼ぶことにする。

したがって、$x=a^y$を満たす$y$を$y=\log_{a}x$と定義する。

ただし、$x>0$とし、$y$は実数の全範囲をとれるものとする。

# 対数関数の公式と指数法則の関係性
ここで、上の定義を用いて対数関数の公式を証明していく。

## 和の公式

$y_1=\log_a x_1,y_2=\log_a x_2$とおくと、$x_1=a^{y_1},x_2=a^{y_2}$と表せる。

この場合、指数法則より以下のことが分かる

```math
x_1 x_2 =a^{y_1}a^{y_2}=a^{y_1+y_2}
```

したがって、対数関数の定義より、以下の式が成立する。

```math
y_1+y_2=\log_a {(x_1 x_2)}
```

ここで、$y_1=\log_a x_1,y_2=\log_a x_2$とおいたので、

```math
\log_a {(x_1 x_2)}=\log_a x_1+\log_a x_2
```


## べき乗の公式

$y=a^x$としたとき、$x_1=\log_a{y}$を考える。

対数の定義より、

```math
y=a^{x_1}
```

となる。したがって、$y=a^x=a^{x_1}$が成立する。

指数関数は単調関数なので、$x=x_1$である。

したがって、以下の式が成立する。


```math
x=\log_{a} a^x
```

という式が成立する。

ちなみに、和の公式より、

```math
\log_ {a} b^x = x \log_{a} b
```

が成立する。したがって、

```math
\log_ {a} b^{-1} = - \log_{a} b
```
が成立するので、和の公式より、

```math
\log_ {a} \frac{x}{y}=\log_a x - \log_a y
```

## 底の変換公式
天下り的だが、以下のような式を定義する。
```math
\begin{equation}
\left\{ \,
    \begin{aligned}
    & b=a^f \\
    & b=c^f_1 \\
    & a = c^f_2
    \end{aligned}
\right.
\end{equation}

```

これを変形すると、マトリョーシカのように、

```math
b=(c^f_2)^f=c^{ff_2}(=c^f_1)
```

となる。ただし、指数法則を使用した。


ここで、指数関数は単調関数より、

```math
f_1=ff_2
```

つまり、

```math
f=\frac{f_1}{f_2}
```

が成立する。

したがって、対数関数の定義より、


```math
\log_a b=\frac{\log_c b}{\log_c a}
```

これを対数関数の底の変換公式と呼ぶ。

覚え方としては、大きさを知りたい$b$の方が$a$よりも重要な値になるので、$\log_a b$は分子側である。

# プログラム
さて、指数関数とその逆関数を描写するプログラムを作成した。

```python exp_a.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
import matplotlib.animation as animation

#描写領域設定
n=100
L=4
x=np.linspace(-(L+1), L+1, n)

# 指数関数の底
a=2
aa=3

y1=a**x
y2=aa**x

ax1=plt.figure(figsize=(8, 8))
ax1 = plt.subplot(111)
# 指数関数
ax1.plot(x,y1,color='blue', label="y="+str(int(a))+"^x")
ax1.plot(x,y2,color='red', label="y="+str(int(aa))+"^x")
# 指数関数の逆関数
ax1.plot(y1,x,color='blue', label="x="+str(int(a))+"^y")
ax1.plot(y2,x,color='red', label="x="+str(int(aa))+"^y")
# y=xの直線
ax1.plot(x,x, color='black',  label='y=x')

# グラフのxy軸(枠)の設定
ax1.spines["right"].set_color("none")      # グラフ右側の軸(枠)を消す
ax1.spines["top"].set_color("none")        # グラフ上側の軸(枠)を消す
ax1.spines['left'].set_position('zero')    #グラフ左側の軸(枠)が原点を通る
ax1.spines['bottom'].set_position('zero')  #グラフ下側の軸(枠)が原点を通る

plt.grid()

plt.legend()

plt.xlim(-L,L)
plt.ylim(-L,L)

plt.savefig("指数関数と逆関数.png")
plt.show()
```


これを実行すると、以下のようなグラフが出力される。

![指数関数と逆関数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/37ca3167-24a9-4acd-a716-155acaff0a1c.png)


$x>1$のとき、$\log_3{x}<\log_2{x}$であることが分かる。これは、$x>0$のとき$3^x>2^x$となることと同値であるといえる。

このように、対数関数をいきなり考えるのではなく、’指数関数の逆関数としての対数関数’と考えれば理解しやすい。

# まとめ

今回は、指数関数の逆関数として定義される対数関数について解説した。具体的には逆関数の図形的性質から対数関数を導入し、対数関数の各公式を証明した。対数関数を含め数学の関数の性質は、暗記以前にグラフ化で視覚的に理解すべきである。なので、最初は対数関数をいきなり考えるのではなく、自分が知っている知識かつ比較的シンプルな指数関数から攻めていくべきである。