非線形方程式 scipy

非線形方程式

Scipyを使用して、非線形方程式を解く問題を考えてみましょう。

具体的には、以下の非線形方程式を解くことを目指します。

$ x^2 + y^2 = 25 $
$ x^2 - y = 7 $

この方程式を解くために、Scipyのfsolve()関数を使用します。

以下のコードをご参考ください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

def equations(vars):
x, y = vars
eq1 = x**2 + y**2 - 25
eq2 = x**2 - y - 7
return [eq1, eq2]

# 初期値を設定します
initial_guess = [0, 0]

# 方程式を解きます
solution = fsolve(equations, initial_guess)
print("Solution: x =", solution[0], ", y =", solution[1])

x_solution, y_solution = solution[0], solution[1]

# グラフの範囲を設定します
x = np.linspace(-10, 10, 400)
y = np.linspace(-10, 10, 400)

# グリッドを作成します
X, Y = np.meshgrid(x, y)

# 方程式を計算します
Z1 = X**2 + Y**2 - 25
Z2 = X**2 - Y - 7

# グラフを作成します
fig, ax = plt.subplots()
ax.contour(X, Y, Z1, levels=[0], colors='r', label='x^2 + y^2 = 25')
ax.contour(X, Y, Z2, levels=[0], colors='b', label='x^2 - y = 7')
ax.plot(x_solution, y_solution, 'go', label='Solution')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
plt.grid(True)
plt.show()

このコードでは、fsolve()関数を使用して非線形方程式の解を求め、解をx_solutiony_solutionに格納します。

次に、グラフの範囲を設定し、np.meshgrid()関数を使用してグリッドを作成します。

方程式を計算し、contour()関数を使用して等高線プロットを作成します。

また、解をplot()関数を使用してプロットし、グラフに表示します。

上記のコードを実行すると、非線形方程式の解を含むグラフが表示されます。

赤い等高線は方程式 $x^2 + y^2 = 25$ を表し、青い等高線は方程式 $x^2 - y = 7$ を表します。

緑の点は、求めた解を示しています。

このように、ScipyとMatplotlibを組み合わせることで、非線形方程式の解を視覚化することができます。

グラフを通じて、方程式の解がどのように見えるかを直感的に理解することができます。