Python pour le calcul scientifique/Résolution d'équations

Un livre de Wikilivres.
Aller à la navigation Aller à la recherche

Rappelons que dorénavant les programmes commencent tous par :

import numpy as np
import matplotlib.pyplot as plt

Système d'équations linéaires[modifier | modifier le wikicode]

Le sujet a été abordé dans le chapitre concernant l'algèbre linéaire.

Pour plus de détails voir : Python pour le calcul scientifique/Algèbre_linéaire#Résolution_d'un_système_linéaire.

Équation polynomiale[modifier | modifier le wikicode]

La résolution d'une équation polynomiale consiste à trouver les racines de son polynôme. Par exemple, pour résoudre l'équation

nous pouvons utiliser :

import numpy.polynomial.polynomial as nppol

X = nppol.polyroots([5, 3, 1]) # [-1.5-1.6583124j -1.5+1.6583124j]


Pour plus de détails voir : Python pour le calcul scientifique/Polynômes#Vecteur_de_coefficients.

Équation différentielle[modifier | modifier le wikicode]

Le sujet est abordé dans le chapitre sur le calcul différentiel.

Pour plus de détails voir : Python pour le calcul scientifique/Calcul_différentiel_et_intégral#Équations_différentielles.

Équation quelconque[modifier | modifier le wikicode]

Une équation peut s'écrire de manière générale

y = ƒ(x)

ce qui revient à résoudre

ƒ(x) – y = 0.

Le module scipy.optimize propose la fonction root() pour cela.

Par exemple, nous cherchons ci-dessous à résoudre x² + 5⋅sin x = 2

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize as opt

def f(x):
    '''fonction présentant au moins un zéro'''
    return x*x + 5*np.sin(x)

def residu(x, y):
    return f(x) - y

x = np.linspace(-4, 4, 40)
y = f(x)

ycible = 2
x0 = 0 # point de départ

minimum = opt.root(residu, x0, args=(ycible))
xopt = minimum.x[0]
yopt = f(xopt)
print(f"La valeur y = {round(yopt, 2)} est atteinte x = {round(xopt, 2)}")
# La valeur y = 2.0 est atteinte x = 0.38

plt.plot(x, y)
plt.plot((x[0], x[-1]), (ycible, ycible), "--k", linewidth=0.5)
plt.plot(xopt, yopt, "+k")

Le graphique nous montre qu'il existe une autre solution (x = –2,35). Nous pouvons trouver la trouver avec un point de départ différent, par exemple x0 = -5.


Pour plus de détails voir : Python pour le calcul scientifique/Régression_et_optimisation#Régression_non-linéaire.

Notes et références[modifier | modifier le wikicode]


Calcul différentiel et intégral < > Calcul symbolique