edo1z blog

プログラミングなどに関するブログです

Python3 - 対数

Pythonで対数を出すには、math.logを使います。import mathで使えるようになります。

import math
print(math.log(2, 10))

0.30102999566398114

これは、10を何乗したら2になるか?です。log102です。 試しに、10を0.30102999566398114乗してみます。

print(pow(10, 0.30102999566398114))

1.9999999999999998

100の0.5乗は、100の平方根なので10です。

print(pow(100, 0.5))

10.0

27の0.3333333333333333333333333333333333333333333乗は、大体27の立方根なので、3に近いはずです。

print(pow(27, 0.3333333333333333333333333333333333333333333))

3.0

おージャスト3.0になった。

print(pow(27, 0.333333333333333))

2.9999999999999964

print(pow(27, 0.3333333333333333))

3.0

少数15桁までだと2.99...になりますが、16桁にするとジャスト3.0になる。

10を底とする対数を常用対数といいます。

対数関数と指数関数は逆関数の関係にあります。逆関数はy=xに対して対称です。指数関数と対数関数のグラフを書いてみます。 y = axの指数関数と、y = logaxの対数関数を書きます。

numpyを使いたいので、math.logではなくnp.logを使います。aを2として、np.log2を使います。例えばnp.log2(4)とすると2になります。2を底とした4の対数を出しています。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0.1, 3, 0.1)
y = x
plt.plot(x, y, label='y=x')
y = 2 ** x
plt.plot(x, y, label='y=2**x')
y = np.log2(x)
plt.plot(x, y, label='y=log2 x')
plt.grid(True)
plt.legend()
plt.show()

対称なのか全然これじゃ分からない。

対数関数は、 対数が1より小さいとき、 底が1より大きければ、真数は底より小さい。 底が1より小さければ、真数は底より大きくなる。

対数関数を、底の大きさのパターンで2つ書いてみる。

import math
import numpy as np
import matplotlib.pyplot as plt

#底は1ではない正の数
#底が1より大きい場合
a = 2
#底が1より小さい場合
b = 0.5
#xは真数
x_list = np.arange(0.1, 3, 0.1).tolist()
#yは対数
y_a = []
y_b = []
for x in x_list:
    y_a.append(math.log(x, a))
    y_b.append(math.log(x, b))
plt.plot(x_list, y_a)
plt.plot(x_list, y_b)
plt.grid(True)
plt.show()

2100の桁数を出すには、常用対数を使います。 log102100 = 100log102 = 100 * 0.30102999566398114 = 30.102999566398114 よって31桁です。10の2乗は100なので3桁です。10の3乗は1000で4桁です。2.1乗は100より大きく、1000より小さいので3桁です。30.10乗は31桁です。