- À propos de la résolution d'équations avec SymPy
- Résoudre une équation simple avec solve()
- Résoudre une équation du second degré
- Résoudre des équations polynomiales
- Résoudre des équations rationnelles
- Résoudre des équations contenant des fonctions
- Choisir la variable à résoudre
- Résoudre un système d'équations avec solve()
- Utiliser solve() avec dict=True et vérifier les solutions
- À retenir !
1. À propos de la résolution d'équations avec SymPy
La bibliothèque SymPy permet de résoudre symboliquement de nombreux types d'équations mathématiques. La fonction solve() recherche les valeurs des inconnues qui rendent une équation vraie.
Une équation peut être représentée avec la classe Eq. Par exemple, l'équation 2x + 3 = 7 peut être construite avec Eq(2*x + 3, 7).
Le programme suivant crée cette équation puis utilise solve() pour déterminer la valeur de x.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve x = symbols("x") equation = Eq(2*x + 3, 7) solution = solve(equation, x) print(solution) |
Sortie :
1 | [2] |
La fonction solve() retourne ici une liste contenant la solution x = 2.
2. Résoudre une équation simple avec solve()
La syntaxe courante est solve(equation, inconnue). Il n'est pas obligatoire d'utiliser Eq. Lorsqu'une expression est transmise directement à solve(), SymPy considère que nous cherchons les valeurs pour lesquelles cette expression est égale à zéro.
Le programme suivant résout donc l'équation 3x - 12 = 0.
1 2 3 4 5 | from sympy import symbols, solve x = symbols("x") solution = solve(3*x - 12, x) print(solution) |
Sortie :
1 | [4] |
La valeur x = 4 annule l'expression 3x - 12.
Nous pouvons également écrire explicitement les deux membres d'une équation avec Eq.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve x = symbols("x") equation = Eq(5*x + 2, 3*x + 10) solution = solve(equation, x) print(solution) |
Sortie :
1 | [4] |
SymPy effectue automatiquement les transformations algébriques nécessaires pour isoler l'inconnue.
3. Résoudre une équation du second degré
La fonction solve() permet de résoudre facilement une équation du second degré. Lorsque plusieurs solutions existent, elles sont généralement retournées dans une liste.
Le programme suivant résout l'équation x² - 5x + 6 = 0.
1 2 3 4 5 6 | from sympy import symbols, solve x = symbols("x") equation = x**2 - 5*x + 6 solutions = solve(equation, x) print(solutions) |
Sortie :
1 | [2, 3] |
Le polynôme se factorise sous la forme (x - 2)(x - 3). Les solutions sont donc x = 2 et x = 3.
SymPy peut également retourner des solutions exactes contenant des racines carrées.
1 2 3 4 5 6 | from sympy import symbols, solve x = symbols("x") equation = x**2 - 2 solutions = solve(equation, x) print(solutions) |
Sortie :
1 | [-sqrt(2), sqrt(2)] |
SymPy conserve les solutions sous leur forme exacte au lieu de les remplacer automatiquement par des approximations décimales.
4. Résoudre des équations polynomiales
La fonction solve() ne se limite pas aux équations du premier et du second degré. Elle peut également rechercher les racines de nombreux polynômes de degré supérieur.
Le programme suivant résout une équation polynomiale du troisième degré.
1 2 3 4 5 6 | from sympy import symbols, solve x = symbols("x") equation = x**3 - 6*x**2 + 11*x - 6 solutions = solve(equation, x) print(solutions) |
Sortie :
1 | [1, 2, 3] |
Les trois racines du polynôme sont 1, 2 et 3.
SymPy peut également retourner des solutions complexes lorsqu'une équation n'a pas uniquement des solutions réelles.
1 2 3 4 5 6 | from sympy import symbols, solve x = symbols("x") equation = x**2 + 1 solutions = solve(equation, x) print(solutions) |
Sortie :
1 | [-I, I] |
Le symbole I représente l'unité imaginaire de SymPy vérifiant I² = -1. Si nous souhaitons imposer explicitement un domaine de résolution, solveset() constitue souvent une alternative mieux adaptée.
5. Résoudre des équations rationnelles
La fonction solve() peut résoudre des équations contenant des fractions algébriques. Il faut toutefois tenir compte du domaine de définition afin d'exclure les valeurs qui annulent un dénominateur.
Le programme suivant résout une équation rationnelle simple.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve x = symbols("x") equation = Eq(1/x, 2) solution = solve(equation, x) print(solution) |
Sortie :
1 | [1/2] |
La solution exacte est x = 1/2. La valeur x = 0 est naturellement exclue puisque l'expression 1/x n'y est pas définie.
Le programme suivant résout une équation comportant deux fractions rationnelles.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve x = symbols("x") equation = Eq(1/(x - 1), 2/(x + 1)) solution = solve(equation, x) print(solution) |
Sortie :
1 | [3] |
La solution est x = 3. Les valeurs x = 1 et x = -1 sont interdites dans l'équation originale car elles annulent respectivement l'un des dénominateurs.
6. Résoudre des équations contenant des fonctions
La fonction solve() peut également traiter certaines équations contenant des fonctions exponentielles, logarithmiques ou trigonométriques. Le résultat dépend de la nature de l'équation et de la capacité de SymPy à isoler symboliquement l'inconnue.
Le programme suivant résout une équation exponentielle simple.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve, exp x = symbols("x") equation = Eq(exp(x), 5) solution = solve(equation, x) print(solution) |
Sortie :
1 | [log(5)] |
La solution exacte est x = log(5), où log représente le logarithme naturel.
Nous pouvons de la même manière résoudre une équation logarithmique simple.
1 2 3 4 5 6 | from sympy import symbols, Eq, solve, log x = symbols("x", positive=True) equation = Eq(log(x), 2) solution = solve(equation, x) print(solution) |
Sortie :
1 | [exp(2)] |
L'hypothèse positive=True correspond ici au domaine réel naturel du logarithme utilisé dans l'exemple.
Pour les équations trigonométriques, solve() peut retourner certaines solutions, mais une équation trigonométrique possède souvent une infinité de solutions. Pour obtenir une description complète sur un domaine donné, solveset() est généralement préférable.
1 2 3 4 5 | from sympy import symbols, solve, sin x = symbols("x") solutions = solve(sin(x), x) print(solutions) |
Sortie :
1 | [0, pi] |
Cette sortie ne doit pas être interprétée comme l'ensemble complet des solutions de sin(x) = 0 sur les réels. La solution générale est x = kπ avec k entier ; pour représenter correctement ce type d'ensemble infini, solveset() est plus appropriée.
7. Choisir la variable à résoudre
Lorsqu'une équation contient plusieurs symboles, nous pouvons préciser à solve() la variable que nous souhaitons isoler. Les autres symboles sont alors considérés comme des paramètres.
Le programme suivant résout l'équation ax + b = 0 par rapport à x.
1 2 3 4 5 6 | from sympy import symbols, solve x, a, b = symbols("x a b") equation = a*x + b solution = solve(equation, x) print(solution) |
Sortie :
1 | [-b/a] |
Cette formule suppose le cas générique a ≠ 0. Si a = 0, l'équation doit être étudiée séparément selon la valeur de b.
Nous pouvons utiliser la même équation et demander cette fois à SymPy d'isoler le paramètre a.
1 2 3 4 5 6 | from sympy import symbols, solve x, a, b = symbols("x a b") equation = a*x + b solution = solve(equation, a) print(solution) |
Sortie :
1 | [-b/x] |
Dans ce cas, SymPy considère a comme l'inconnue et retourne son expression en fonction de x et b, dans le cas générique où x ≠ 0.
8. Résoudre un système d'équations avec solve()
La fonction solve() peut également résoudre un système d'équations. Il suffit de fournir une liste d'équations ainsi que la liste des inconnues recherchées.
Le programme suivant résout le système formé par x + y = 5 et x - y = 1.
1 2 3 4 5 6 7 | from sympy import symbols, Eq, solve x, y = symbols("x y") equation1 = Eq(x + y, 5) equation2 = Eq(x - y, 1) solution = solve([equation1, equation2], [x, y]) print(solution) |
Sortie :
1 | {x: 3, y: 2} |
Le résultat est ici un dictionnaire associant chaque inconnue à sa valeur.
SymPy peut également résoudre certains systèmes non linéaires. Le programme suivant cherche les points d'intersection de la parabole y = x² et de la droite y = 4.
1 2 3 4 5 6 7 | from sympy import symbols, Eq, solve x, y = symbols("x y") equation1 = Eq(y, x**2) equation2 = Eq(y, 4) solutions = solve([equation1, equation2], [x, y]) print(solutions) |
Sortie :
1 | [(-2, 4), (2, 4)] |
Les deux points solutions sont donc (-2, 4) et (2, 4).
9. Utiliser solve() avec dict=True et vérifier les solutions
Selon le type d'équation ou de système, solve() peut retourner une liste, un dictionnaire ou d'autres structures. L'option dict=True permet de demander des solutions sous forme d'une liste de dictionnaires, ce qui peut faciliter leur traitement dans un programme.
Le programme suivant utilise dict=True pour résoudre une équation du second degré.
1 2 3 4 5 6 | from sympy import symbols, solve x = symbols("x") equation = x**2 - 5*x + 6 solutions = solve(equation, x, dict=True) print(solutions) |
Sortie :
1 | [{x: 2}, {x: 3}] |
Chaque solution est maintenant représentée par un dictionnaire associant x à sa valeur.
Après avoir obtenu une solution, il est souvent utile de la vérifier en la remplaçant dans l'expression originale avec subs(). Une solution correcte doit annuler l'expression lorsque l'équation a été écrite sous la forme expression = 0.
1 2 3 4 5 6 7 8 | from sympy import symbols, solve x = symbols("x") expression = x**2 - 5*x + 6 solutions = solve(expression, x) for valeur in solutions: print(valeur, "->", expression.subs(x, valeur)) |
Sortie :
1 2 | 2 -> 0 3 -> 0 |
Les deux substitutions donnent 0, ce qui confirme que les valeurs obtenues satisfont bien l'équation.
Pour une vérification plus directe, SymPy fournit également la fonction checksol().
1 2 3 4 5 6 7 | from sympy import symbols, checksol x = symbols("x") expression = x**2 - 5*x + 6 print(checksol(expression, x, 2)) print(checksol(expression, x, 4)) |
Sortie :
1 2 | True False |
La valeur 2 est bien une solution, tandis que 4 ne satisfait pas l'équation.
10. À retenir !
La fonction solve() de SymPy est l'un des principaux outils de résolution symbolique d'équations en Python. Elle permet de traiter des équations algébriques, des équations rationnelles, certaines équations contenant des fonctions ainsi que des systèmes d'équations.
- solve(expression, x) recherche les valeurs de x qui annulent une expression.
- solve(Eq(gauche, droite), x) permet de résoudre une équation écrite avec deux membres.
- Une équation peut avoir une seule solution, plusieurs solutions ou aucune solution dans le domaine considéré.
- solve() conserve généralement les solutions sous une forme symbolique exacte.
- Les équations polynomiales peuvent produire des solutions réelles ou complexes.
- Pour les fractions rationnelles, il faut tenir compte des valeurs interdites du domaine original.
- Dans une équation paramétrique, il faut tenir compte des valeurs particulières des paramètres pouvant modifier la nature des solutions.
- solve() peut également résoudre des systèmes d'équations.
- L'option dict=True permet d'obtenir les solutions sous forme de dictionnaires.
- subs() et checksol() permettent de vérifier les solutions obtenues, tandis que solveset() est souvent préférable lorsque nous souhaitons contrôler précisément le domaine et représenter des ensembles de solutions.
Le programme suivant rassemble plusieurs utilisations importantes de solve() : résolution d'une équation linéaire, d'une équation du second degré et d'un système.
1 2 3 4 5 6 7 8 9 10 11 | from sympy import symbols, Eq, solve x, y = symbols("x y") solution1 = solve(2*x - 6, x) solution2 = solve(x**2 - 5*x + 6, x) solution3 = solve([Eq(x + y, 5), Eq(x - y, 1)], [x, y]) print("Équation linéaire :", solution1) print("Équation du second degré :", solution2) print("Système :", solution3) |
Sortie :
1 2 3 | Équation linéaire : [3] Équation du second degré : [2, 3] Système : {x: 3, y: 2} |
Mots clés : Python, SymPy, solve SymPy, résoudre équation, équation Python, équation algébrique, équation polynomiale, équation du second degré, équation rationnelle, système équations, Eq SymPy, solutions symboliques, checksol SymPy, solveset SymPy, calcul symbolique
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


