Maison  >  Article  >  développement back-end  >  Trois façons de résoudre des équations en Python

Trois façons de résoudre des équations en Python

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-06-14 17:14:2832168parcourir

Trois façons de résoudre des systèmes d'équations en python :

Recommandations associées : "vidéo python"

Trois façons de résoudre des équations en 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 = 0

Cela 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 = 0

C'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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn