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桁です。