Maison > Article > développement back-end > Trois façons de résoudre des équations en Python
Trois façons de résoudre des systèmes d'équations en python :
Recommandations associées : "vidéo python"
Numpy Résoudre le système d'équations
x + 2y = 3 4x + 5y = 6
Bien sûr, nous pouvons écrire manuellement la solution analytique, puis écrire une fonction pour la résoudre. Il s'agit en fait simplement d'utiliser Python pour effectuer des "calculs numériques". Mais en fait, numpy.linalg.solve peut résoudre directement des équations linéaires.
Généralement, nous supposons que les équations linéaires ont la forme de Ax=b, où A est la matrice des coefficients et b est unidimensionnel (n-dimensionnel également Oui, cela sera mentionné ci-dessous), x est une variable inconnue en prenant comme exemple le système d'équations linéaires le plus simple à deux variables ci-dessus, nous pouvons utiliser numpy.linalg.solve pour écrire comme ceci. :
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.]]
Alors comme mentionné précédemment Quelle est la situation « à n dimensions » ? En fait, il s'agit de résoudre plusieurs ensembles d'équations linéaires de deux variables de même forme en même temps. Par exemple, si l'on veut résoudre ces deux ensembles en même temps :
x + 2y = 3 4x + 5y = 6
et
x + 2y = 7 4x + 5y = 8, on peut l'écrire comme ceci :
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 résout des équations non linéaires
De manière générale, nous n'avons besoin d'utiliser que func et x0. une fonction construite par nous-mêmes, qui est le système d'équations qui doit être résolu L'extrémité gauche de (l'extrémité droite est 0), et x0 est la valeur initiale donnée.Regardons un exemple spécifique pour solve :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 = 0Cela peut s'écrire comme ceci :
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]Bien sûr, SciPy peut également être utilisé pour résoudre des équations linéaires, car scipy.optimize.fsolve est essentiellement la méthode des moindres carrés. pour approximer les résultats réels.
SymPy résout le système d'équations
Par exemple, pour résoudre un problème :x + 2 * (x ** 2) + 3 * (x ** 3) - 6 = 0C'est directement :
In [4]: from sympy import * ...: x = symbols('x') ...: solve(x + 2 * (x ** 2) + 3 * (x ** 3) - 6, x) Out[4]: [1, -5/6 - sqrt(47)*I/6, -5/6 + sqrt(47)*I/6]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!