Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

指数関数と対数関数

指数関数

ネイピア数

以下で定義される定数eeをネイピア数という

limn(1+1n)n=e=2.7182818\lim _{n \rightarrow \infty}\left(1+\frac{1}{n}\right)^n=e=2.7182818 \cdots

(英語だとtheがつくかどうかで底の違いを表現する。日本語だとややこしいが、標準的な指数関数はeeを底とする指数関数である)

Source
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 2, 100)
y = np.array([np.exp(xi) for xi in x])

fig, ax = plt.subplots(figsize=[4, 2])
ax.plot(x, y, label=r"$\exp(x)$")
ax.set(xlabel="x", ylabel="y")
ax.axhline(color="gray")
ax.axvline(color="gray")
ax.legend()
fig.show()
<Figure size 400x200 with 1 Axes>

x=0x=0のとき、e0=1e^0 = 1

x=1x=1のとき、e1=ee^1 = e

x=1x=-1のとき、e1=1e=0.3678e^{-1} = \frac{1}{e} = 0.3678 \cdots

(1+xn)n\left(1+\frac{x}{n}\right)^nを有限の範囲でいくつか試すと以下のようになる

x = 1
for n in range(1, 6):
    e = (1 + (x / n))**n
    print(f"{n=}, {e=:.3f}")
n=1, e=2.000
n=2, e=2.250
n=3, e=2.370
n=4, e=2.441
n=5, e=2.488
Source
import numpy as np
import matplotlib.pyplot as plt

N = np.linspace(1, 100, 101)
E = [(1 + (x / n))**n for n in N]

fig, ax = plt.subplots(figsize=[4, 2])
ax.plot(N, E)
ax.set(
    xlabel="n",
    ylabel=r"$(1 + \frac{x}{n})^n$",
    title=r"$(1 + \frac{x}{n})^n, x=1$",
    yticks=[2, np.exp(1),3],
)
ax.axhline(np.exp(1), color="gray")
ax.axvline(color="gray")
fig.show()
<Figure size 400x200 with 1 Axes>

指数(関数)の基本的性質(指数法則)

例:x1x^{-1} は?

x1x^{-1}xxを乗じればx1×x1=x1+1=x0=1x^{-1} \times x^1 = x^{-1 + 1} = x^0 = 1となる。

なのでx1=1xx^{-1} = \frac{1}{x}となる。一般にxnx^{-n}も同様。

例:x12x^{\frac{1}{2}} は?

x12x^{\frac{1}{2}}x12x^{\frac{1}{2}}を乗じればx12×x12=x12+12=xx^{\frac{1}{2}} \times x^{\frac{1}{2}} = x^{\frac{1}{2} + \frac{1}{2}} = xとなる。

なのでx12=xx^{\frac{1}{2}} = \sqrt{x}

xxを0.01増やすとyyが1%増える

この誤差はxxが大きくなるにつれて大きくなる

Source
import numpy as np
import pandas as pd

x = np.linspace(0, 0.1, 11)
y = np.exp(x)

display(pd.DataFrame(dict(x=x, y=y)).round(3))
Loading...
Source
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 0.5, 0.01)
y = np.exp(x)

fig, axes = plt.subplots(figsize=[5, 3], nrows=2, sharex=True)
axes[0].plot(x, 1+x, label=r"$1 + x$")
axes[0].plot(x, y, label=r"$exp(x)$")
axes[0].legend()
axes[1].plot(x, y - (1+x), label=r"difference: $exp(x) - (1 + x)$")
axes[1].legend()
axes[0].set(title=r"$exp(x) \approx 1 + x$")
plt.show()
<Figure size 500x300 with 2 Axes>

対数関数

指数関数の逆関数を 対数関数 (logarithmic function)という。

ay=xa^y = xのとき、「yyaa とする xx の対数」といい

y=logaxy = \log_{a} x

と表す。

Source
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.1, 5, 100)
y = np.array([np.log(xi) for xi in x])

fig, ax = plt.subplots(figsize=[4, 2])
ax.axhline(color="gray")
ax.axvline(color="gray")
ax.plot(x, y, label=r"$\log(x)$")
ax.set(xlabel="x", ylabel="y")
ax.legend()
fig.show()
<Figure size 400x200 with 1 Axes>

自然対数

底(base)がネイピア数 ee の対数を自然対数という。

lnx:=logex\ln x := \log_e x

また自然対数は指数関数exe^xの逆関数として定義される(「eeを何乗したらxxになるか?」がlnx\ln x

y=lnxey=xy=\ln x \quad \Longleftrightarrow \quad e^y=x

対数関数の性質

a>0,a1,b>0,M>0,N>0a > 0, a \neq 1, b > 0, M > 0, N > 0に対して

loga1=0logaa=1logaxy=logaxlogaylogaxy=logax+logaylogaxy=ylogaxlogbx=logaxlogab\begin{align} \log_a 1 &= 0\\ \log_a a &= 1\\ \log_a \frac{x}{y} &= \log_a x - \log_a y\\ \log_a xy &= \log_a x + \log_a y\\ \log_a x^y &= y \log_a x\\ \log_b x &= \frac{\log_a x}{\log_a b}\\ \end{align}
例:axa^x

底がaaの対数を取る場合

loga(ax)=x\log_a (a^x) = x

自然対数を使う場合

ln(ax)=xln(a)(logxy=ylogxの性質より)\ln (a^x) = x \ln(a) \quad (\because \log x^y = y \log x の性質より)

元本が2倍になる年数は

例:元本が2倍になる年数は?

年率5%の利益が複利で運用できるとして、元本が2倍になるには何年かかる?

利率rrnn年間複利運用したときの利益率π\pi

(1+r)n=π(1 + r)^n = \pi

r=0.05r=0.05とすると、π=2\pi=2になるのは

(1.05)n=2(1.05)^n = 2

両辺の対数をとると

log10(1.05)n=log102nlog101.05=log102n=log102log101.0514.2\log_{10} (1.05)^n = \log_{10} 2 \\ \to n \log_{10} 1.05 = \log_{10} 2 \\ \to n = \frac{ \log_{10} 2 }{ \log_{10} 1.05 } \approx 14.2

なので約14年かかることになる。

import numpy as np
np.log10(2) / np.log10(1.05)
14.206699082890461

ln(1.01)0.01\ln(1.01) \approx 0.01