Introduction

Les équations sont le pain et le beurre des mathématiques. Que vous calculiez en physique, que vous manipuliez des algorithmes ou que vous vous entraîniez, il est super utile de savoir comment les résoudre avec du code. Regardons quatre cas :

  1. Équation linéaire (ax + b = 0)
  2. Équation quadratique (ax² + bx + c = 0)
  3. Système de deux équations linéaires (deux inconnues)
  4. Équation cubique (ax³ + bx² + cx + d = 0)

Pour chacun, nous commencerons par la logique mathématique, puis nous passerons au code C++ et Python.

1. Équation Linéaire (ax + b = 0)

Comment résoudre (math) :

  • Déplacez b de l'autre côté : ax = -b.
  • Si a = 0 et b = 0 → solutions infinies.
  • Si a = 0 et b ≠ 0 → pas de solution.
  • Sinon, x = -b/a.

C++ :

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a, b;
    cin >> a >> b;

    if (fabs(a) < 1e-9) {
        if (fabs(b) < 1e-9) cout << "Solutions infinies\n";
        else cout << "Pas de solution\n";
    } else {
        cout << "x = " << -b/a << endl;
    }
    return 0;
}

Python :

a, b = map(float, input("Entrez a, b : ").split())

if abs(a) < 1e-9:
    if abs(b) < 1e-9:
        print("Solutions infinies")
    else:
        print("Pas de solution")
else:
    print("x =", -b/a)

2. Équation Quadratique (ax² + bx + c = 0)

Comment résoudre (math) :

  • Calculez le discriminant : Δ = b² − 4ac.
  • Si Δ < 0 : pas de solution réelle.
  • Si Δ = 0 : une racine double x = −b/(2a).
  • Si Δ > 0 : deux racines x₁, x₂ en utilisant la formule quadratique.
  • Si a = 0 : réduire à linéaire.

C++ :

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a, b, c;
    cin >> a >> b >> c;

    if (fabs(a) < 1e-9) {
        cout << "x = " << -c/b << "\n";
    } else {
        double delta = b*b - 4*a*c;
        if (delta < 0) cout << "Pas de racines réelles\n";
        else if (fabs(delta) < 1e-9) cout << "Racine double x = " << -b/(2*a) << "\n";
        else {
            cout << "x1 = " << (-b + sqrt(delta))/(2*a) << "\n";
            cout << "x2 = " << (-b - sqrt(delta))/(2*a) << "\n";
        }
    }
}

Python :

import math

a, b, c = map(float, input("Entrez a, b, c : ").split())
if abs(a) < 1e-9:
    print("x =", -c/b)
else:
    delta = b*b - 4*a*c
    if delta < 0:
        print("Pas de racines réelles")
    elif abs(delta) < 1e-9:
        print("Racine double x =", -b/(2*a))
    else:
        x1 = (-b + math.sqrt(delta))/(2*a)
        x2 = (-b - math.sqrt(delta))/(2*a)
        print("x1 =", x1, "x2 =", x2)

3. Système de Deux Équations Linéaires

Forme :

ax + by = c
dx + ey = f

Comment résoudre (math) :

  • Utilisez la règle de Cramer.
  • Déterminant : D = ae - bd.
  • Si D ≠ 0 : x = (ce - bf) / D y = (af - cd) / D
    • x = (ce - bf) / D
    • y = (af - cd) / D
  • Si D = 0 : Si Dx = 0 et Dy = 0 → solutions infinies. Sinon → pas de solution.
    • Si Dx = 0 et Dy = 0 → solutions infinies.
    • Sinon → pas de solution.

C++ :

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a,b,c,d,e,f;
    cin >> a >> b >> c >> d >> e >> f;

    double D  = a*e - b*d;
    double Dx = c*e - b*f;
    double Dy = a*f - c*d;

    if (fabs(D) < 1e-9) {
        if (fabs(Dx) < 1e-9 && fabs(Dy) < 1e-9) cout << "Solutions infinies\n";
        else cout << "Pas de solution\n";
    } else {
        cout << "x = " << Dx/D << ", y = " << Dy/D << "\n";
    }
}

Python :

a, b, c, d, e, f = map(float, input("Entrez a,b,c,d,e,f : ").split())

D  = a*e - b*d
Dx = c*e - b*f
Dy = a*f - c*d

if abs(D) < 1e-9:
    if abs(Dx) < 1e-9 and abs(Dy) < 1e-9:
        print("Solutions infinies")
    else:
        print("Pas de solution")
else:
    x = Dx / D
    y = Dy / D
    print("x =", x, "y =", y)

4. Équation Cubique (ax³ + bx² + cx + d = 0)

Comment résoudre (math) :

  • Méthode générale : utilisez la formule de Cardano.
  • Substituez pour éliminer le terme x² : posez x = t - b/(3a).
  • Forme réduite : t³ + pt + q = 0.
  • Discriminant : Δ = (q/2)² + (p/3)³. Si Δ > 0 : 1 racine réelle, 2 racines complexes. Si Δ = 0 : au moins 2 racines réelles égales. Si Δ < 0 : 3 racines réelles distinctes.
    • Si Δ > 0 : 1 racine réelle, 2 racines complexes.
    • Si Δ = 0 : au moins 2 racines réelles égales.
    • Si Δ < 0 : 3 racines réelles distinctes.
  • Honnêtement, coder la formule de Cardano en C++ est un peu pénible. En Python, nous pouvons simplement utiliser NumPy.

C++ (simplifié pour une racine réelle) :

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a,b,c,d;
    cin >> a >> b >> c >> d;

    double f = ((3*c/a) - (b*b)/(a*a)) / 3;
    double g = ((2*b*b*b)/(a*a*a) - (9*b*c)/(a*a) + (27*d/a)) / 27;
    double h = g*g/4 + f*f*f/27;

    if (h > 0) {
        double R = -(g/2) + sqrt(h);
        double S = cbrt(R);
        double T = -(g/2) - sqrt(h);
        double U = cbrt(T);
        double x1 = (S+U) - (b/(3*a));
        cout << "Une racine réelle x = " << x1 << "\n";
    } else {
        cout << "Racines réelles multiples (besoin de la formule complète de Cardano)\n";
    }
}

Python (NumPy) :

import numpy as np

coeffs = list(map(float, input("Entrez a, b, c, d : ").split()))
roots = np.roots(coeffs)
print("Racines :", roots)

Conclusion

Nous avons couvert les mathématiques et le code pour résoudre des équations linéaires, quadratiques, des systèmes 2×2, et des équations cubiques. C++ construit les formules à la main ; Python garde les choses concises (et NumPy trouve facilement les racines cubiques). Essayez d'implémenter chaque résolveur vous-même pour développer à la fois vos compétences en algèbre et en programmation.