Python で方程式を解く 3 つの方法:
関連する推奨事項: 「Python ビデオ 」
Numpy Solving連立方程式
x + 2y = 3 4x + 5y = 6
もちろん、解析解を手動で記述してから、それを解く関数を記述することもできます。これは、実際には Python を使用して「数値計算」を行っているだけです。実際、numpy.linalg.solve は線形方程式を直接解くことができます。
一般に、線形方程式は Ax=b の形であると仮定します。ここで、A は係数行列、b は 1-次元 (n 次元もはい、これについては後述します)、x は未知の変数です。上記の 2 つの変数の最も単純な一次方程式系を例として、numpy.linalg.solve を使用して次のように記述できます。 ##
In [1]: import numpy as np ...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A ...: b = np.mat('3,6').T # 构造转置矩阵 b (这里必须为列向量) ...: r = np.linalg.solve(A,b) # 调用 solve 函数求解 ...: print r ...: Out[1]: [[-1.] [ 2.]]
x + 2y = 3 4x + 5y = 6
x + 2y = 7 4x + 5y = 8
In [2]: import numpy as np ...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A ...: b = np.array([[3,6], [7,8]]).T # 构造转置矩阵 b (这里必须为列向量), ...: 注意这里用的是 array ...: r = np.linalg.solve(A,b) # 调用 solve 函数求解 ...: print r ...: Out[2]: [[-1. -6.33333333] [ 2. 6.66666667]]
SciPy は非線形方程式系を解きます
一般に、使用する必要があるのは func と x0 だけです。 func は自分で構築した関数であり、解く必要のある連立方程式です の左端 (右端は 0)、x0 は与えられた初期値です。解く例:x + 2y + 3z - 6 = 0 5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18 = 0 9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30 = 0
In [3]: from scipy.optimize import fsolve ...: ...: def func(i): ...: x, y, z = i[0], i[1], i[2] ...: return [ ...: x + 2 * y + 3 * z - 6, ...: 5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18, ...: 9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30 ...: ] ...: ...: r = fsolve(func,[0, 0, 0]) ...: print r ...: Out[3]: [ 1.00000001 0.99999998 1.00000001]
SymPy は連立方程式を解きます
たとえば、問題を解決するには:
x + 2 * (x ** 2) + 3 * (x ** 3) - 6 = 0
rree
以上がPython で方程式を解く 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。