math (マス)の関数

mathの基本活用

平方根など

import math

x = 3
y = 4

# 平方根 (sqrt)
print("sqrt(x):", math.sqrt(x))

# べき乗 (pow)
print("pow(x, y):", math.pow(x, y))

# 切り上げ (ceil)
print("ceil(x):", math.ceil(x))

# 切り捨て (floor)
print("floor(x):", math.floor(x))

# 絶対値 (fabs)
print("fabs(x):", math.fabs(x))

# 斜辺の長さ (hypot)
print("hypot(x, y):", math.hypot(x, y))

-------実行結果-------

sqrt(x): 1.7320508075688772
pow(x, y): 81.0
ceil(x): 3
floor(x): 3
fabs(x): 3.0
hypot(x, y): 5.0

三角関数

import math

x = math.pi
y = 3

print(x)

# 三角関数 (sin / cos / tan) - 追加
print("sin(x):", math.sin(x))
print("cos(x):", math.cos(x))
print("tan(x):", math.tan(x))

# 角度変換 (degrees / radians) - 追加
print("degrees(x):", math.degrees(x))  # 2ラジアンを度に変換
print("radians(x):", math.radians(x))  # 2度をラジアンに変換

-------実行結果-------
3.141592653589793
sin(x): 1.2246467991473532e-16
cos(x): -1.0
tan(x): -1.2246467991473532e-16
degrees(x): 180.0
radians(x): 0.05483113556160755

numpyで三角関数

import numpy as np
import matplotlib.pyplot as plt

# 1. 0度から360度までのデータを生成
x_deg = np.linspace(0, 360, 500)

# 2. 度数をラジアンに変換してsinを計算
y = np.sin(np.radians(x_deg))

# 3. グラフのプロット
plt.figure(figsize=(8, 4))
plt.plot(x_deg, y, label='sin(x)', color='blue')

# 4. グラフの見栄えの調整
plt.title('Sine Wave')
plt.xlabel('Angle (degrees)')
plt.ylabel('Value')
# 横軸の目盛りを90度刻みに設定
plt.xticks(np.arange(0, 361, 90))
plt.grid(True)
plt.legend()
plt.axhline(0, color='black', linewidth=0.5) # 0基準線
plt.axvline(0, color='black', linewidth=0.5)

# 5. グラフの表示
plt.show()

mathで三角関数

numpyを使わずにmathだけでsinカーブを描くことはできますか?
numpyを使わずにmathモジュールだけでサインカーブを描画することは技術的には可能です。しかし、いくつかの違いと考慮点があります。

mathモジュールのみで描画する方法:
mathモジュールは、math.sin()のように単一の数値に対して数学関数を適用します。そのため、サインカーブの複数の点 (x_deg と y の配列) を生成するには、Pythonのループを使って各点の値を計算し、それをリストに格納する必要があります。例えば、forループとmath.sin()を使って各角度でのサイン値を計算し、それらをmatplotlibに渡してプロットすることになります。

import math
import matplotlib.pyplot as plt

# 1. 0度から360度までのデータを生成 (Numpyを使わない方法)
x_deg = [i for i in range(361)] # 0度から360度まで1度刻みで生成

# 2. 各度数をラジアンに変換してsinを計算 (Numpyを使わない方法)
y = [math.sin(math.radians(angle)) for angle in x_deg]

# 3. グラフのプロット (残りの部分は同じ)
plt.figure(figsize=(8, 4))
plt.plot(x_deg, y, label='sin(x)', color='blue')

# 4. グラフの見栄えの調整
plt.title('Sine Wave (using math module)')
plt.xlabel('Angle (degrees)')
plt.ylabel('Value')
plt.xticks(range(0, 361, 90))
plt.grid(True)
plt.legend()
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)

# 5. グラフの表示
plt.show()

numpyを使用する場合との違い:

  1. 効率性: numpyは内部的にC言語で実装されており、配列全体に対する操作(ベクトル化演算)が非常に高速です。Pythonの標準的なループで一つずつ計算するよりもはるかに効率的です。特にデータ点が多い場合、その差は顕著になります。
  2. 簡潔性: numpy.linspace()やnumpy.radians()、numpy.sin()といった関数は、配列全体に一度に操作を適用できるため、コードがより簡潔になります。

したがって、mathモジュールだけで描画することは可能ですが、データ分析や科学計算の文脈では、効率とコードの簡潔さからnumpyを使用するのが一般的で推奨されます。特に、大規模なデータセットや複雑な計算を行う場合にはnumpyが不可欠です。

mathについて

math の後ろについている hypot のようなものは「関数(function)」です。
より正確に言うと、math はPythonの標準ライブラリの一つである「モジュール(module)」で、そのモジュールに含まれる「関数(function)」を . (ドット) 演算子を使って呼び出しています。
例えば、math.hypot() は math モジュールの中にある hypot という名前の関数を呼び出しています。

基本的な数学関数:

  • math.sqrt(x): x の平方根を返します。
  • math.pow(x, y): x の y 乗を返します。
  • math.ceil(x): x 以上の最小の整数を返します(切り上げ)。
  • math.floor(x): x 以下の最大の整数を返します(切り捨て)。
  • math.fabs(x): x の絶対値を返します。
  • math.hypot(x, y):# 斜辺の長さ (hypot) – 追加 print(“hypot(x, y):“, math.hypot(x, y))

対数関数:

  • math.log(x, [base]): x の自然対数(または指定された base の対数)を返します。
  • math.log10(x): x の10を底とする対数を返します。

三角関数:

  • math.sin(x): x ラジアンのサインを返します。
  • math.cos(x): x ラジアンのコサインを返します。
  • math.tan(x): x ラジアンのタンジェントを返します。
  • math.degrees(x): ラジアン x を角度に変換します。
  • math.radians(x): 角度 x をラジアンに変換します。

定数:

  • math.pi: 円周率π (3.14159…)。
  • math.e: 自然対数の底e (2.71828…)。

コメント