積分 SciPy

積分

SciPyを使って、積分の例題を解いていきます。

例題:

$sin(x)$を$0$から$ \pi $まで積分してください。

解法

SciPyを使ってこの問題を解決するために、まず必要なライブラリをインポートします。

1
2
3
import numpy as np
from scipy.integrate import quad
import math

次に、積分する関数を定義します。

1
2
def func(x):
return np.sin(x)

そして、quad関数を使って積分を計算します。

1
2
3
4
5
6
lower_limit = 0
upper_limit = math.pi

result, error = quad(func, lower_limit, upper_limit)
print("積分結果:", result)
print("誤差:", error)

このコードを実行すると、$ sin(x) $関数の$ 0 $から$ \pi $までの積分結果が得られます。

[実行結果]
積分結果: 2.0
誤差: 2.220446049250313e-14

グラフ化

matplotlibライブラリを使用してグラフを作成します。

まず、必要なライブラリをインポートします。

1
2
3
import numpy as np
import matplotlib.pyplot as plt
import math

次に、$ sin(x) $関数のグラフをプロットし、積分範囲を示すために、その領域を塗りつぶします。

1
2
3
4
5
6
7
8
9
10
11
12
x = np.linspace(0, 2 * math.pi, 1000)
y = np.sin(x)

plt.plot(x, y, label='sin(x)')
plt.fill_between(x, y, where=[(0 <= val <= math.pi) for val in x], alpha=0.3, label='積分範囲')

plt.xlabel('x')
plt.ylabel('sin(x)')
plt.title('integral of sin(x) from 0 to pi')
plt.legend()
plt.grid()
plt.show()

このコードを実行すると、$ sin(x) $関数のグラフが表示され、$ 0 $から$ \pi $までの積分範囲が塗りつぶされた領域で示されます。

[実行結果]

この領域の面積は、先ほど計算した積分結果に相当します。

グラフからわかるように、$ sin(x) $関数は$ 0 $から$ \pi $までの範囲で正の値をとり、積分結果はこの範囲での$ sin(x) $関数の面積を表しています。


$ sin(x) $関数の$ 0 $から$ \pi $までの積分は、波形の周期性を考慮すると、物理学や工学などの分野で重要な意味を持ちます。

この積分は周期関数の一部分の面積を求めることで、信号処理や波動解析において役立ちます。


さらに、積分の結果を利用して、$ sin(x) $関数の平均値を求めることもできます。

平均値は、積分結果を積分範囲で割ることで計算できます。

1
2
3
integral_result = result  # 先ほど計算した積分結果
average_value = integral_result / (upper_limit - lower_limit)
print("sin(x)の0からπまでの平均値:", average_value)
[実行結果]
sin(x)の0からπまでの平均値: 0.6366197723675814

平均値は、$ 0 $から$ \pi $までの範囲での$ sin(x) $関数の振る舞いを要約する指標として使用できます。

例えば、信号処理において、この平均値は信号の強度やバイアスを評価するために役立ちます。

このように、積分は関数の特性を理解し、さまざまな応用問題を解決するための基本的な数学的手法です。

SciPyを使用することで、これらの問題を効率的に解決できます。

物理学への応用

物理学における運動方程式を用いた例題を考えます。

ある物体が初速度 $v0$ で等加速度運動を行っているとします。

この物体の速度 $v(t)$ は時間tに対して次の関数で表されます。

$ v(t) = v0 + a \times t $

ここで、aは加速度です。物体の位置 $ x(t) $ は速度関数 $ v(t) $ を時間tに関して積分することで求めることができます。

例題

例題: 初速度 $ v0 = 0 m/s $、加速度 $ a = 9.81 m/s² $ で等加速度運動を行う物体がある。

この物体の位置 $ x(t) $ を求め、$t = 0 $ から $ t = 5 $ 秒までの範囲でグラフ化してください。

まず、必要なライブラリをインポートします。

1
2
3
import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as plt

次に、速度関数 $ v(t) $ を定義します。

1
2
3
4
5
v0 = 0
a = 9.81

def velocity(t):
return v0 + a * t

位置関数 $ x(t) $ を求めるために、速度関数を積分します。

1
2
3
def position(t):
result, _ = quad(velocity, 0, t)
return result

最後に、$ t = 0 $から$ t = 5 $秒までの範囲で位置関数$ x(t) $をグラフ化します。

1
2
3
4
5
6
7
8
9
time = np.linspace(0, 5, 100)
position_values = np.array([position(t) for t in time])

plt.plot(time, position_values, label='x(t)')
plt.xlabel('time (sec)')
plt.ylabel('position (meter)')
plt.legend()
plt.grid()
plt.show()

このコードを実行すると、物体の位置$ x(t) $が時間tに対してどのように変化するかを示すグラフが表示されます。

[実行結果]

このグラフから、物体が等加速度運動を行っていることがわかります。

物理学において、積分はこのように運動方程式を解析し、物体の運動を理解するための重要な手法です。


この例題では、物体が等加速度運動を行っていることがわかりました。

さらに、物体の運動に関する他の情報を求めることができます。

例えば、物体が最初の5秒間で移動する距離や、5秒後の速度を計算できます。

物体が最初の5秒間で移動する距離は、位置関数$ x(t) $を$ t = 5 $で評価することで求められます。

1
2
distance_5s = position(5)
print("5秒後の物体の位置:", distance_5s, "メートル")
[実行結果]
5秒後の物体の位置: 122.625 メートル

5秒後の速度は、速度関数$ v(t) $を$ t = 5 $で評価することで求められます。

1
2
velocity_5s = velocity(5)
print("5秒後の物体の速度:", velocity_5s, "m/s")
[実行結果]
5秒後の物体の速度: 49.050000000000004 m/s

このように、積分を用いて物体の運動に関するさまざまな情報を求めることができます。

物理学では、積分は運動方程式を解析するだけでなく、力学、電磁気学、熱力学などの分野でも広く応用されています。

積分は、物理現象を理解し、予測するための基本的な数学的手法です。