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

爱喝马黛茶的安东尼
Libérer: 2019-06-14 18:09:10
original
32172 Les gens l'ont consulté

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
Copier après la connexion
Copier après la connexion

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.]]
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

et <🎜. >

x + 2y = 7
4x + 5y = 8
Copier après la connexion

, on peut l'écrire comme ceci :

In [2]: import numpy as np
  ...: A = np.mat(&#39;1,2; 4,5&#39;)          # 构造系数矩阵 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]]
Copier après la connexion

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
Copier après la connexion

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]
Copier après la connexion

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
Copier après la connexion

C'est directement :

In [4]: from sympy import *
  ...: x = symbols(&#39;x&#39;)
  ...: 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]
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!