Introducción

Las ecuaciones son el pan y la mantequilla de las matemáticas. Ya sea que estés calculando física, manejando algoritmos o simplemente practicando, es muy útil saber cómo resolverlas con código. Veamos cuatro casos:

  1. Ecuación lineal (ax + b = 0)
  2. Ecuación cuadrática (ax² + bx + c = 0)
  3. Sistema de dos ecuaciones lineales (dos incógnitas)
  4. Ecuación cúbica (ax³ + bx² + cx + d = 0)

Para cada uno, comenzaremos con la lógica matemática, luego saltaremos al código en C++ y Python.

1. Ecuación Lineal (ax + b = 0)

Cómo resolver (matemáticas):

  • Mueve b al otro lado: ax = -b.
  • Si a = 0 y b = 0 → infinitas soluciones.
  • Si a = 0 y b ≠ 0 → no hay solución.
  • De lo contrario, 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 << "Soluciones infinitas\n";
        else cout << "No hay solución\n";
    } else {
        cout << "x = " << -b/a << endl;
    }
    return 0;
}

Python:

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

if abs(a) < 1e-9:
    if abs(b) < 1e-9:
        print("Soluciones infinitas")
    else:
        print("No hay solución")
else:
    print("x =", -b/a)

2. Ecuación Cuadrática (ax² + bx + c = 0)

Cómo resolver (matemáticas):

  • Calcula el discriminante: Δ = b² − 4ac.
  • Si Δ < 0: no hay solución real.
  • Si Δ = 0: una raíz doble x = −b/(2a).
  • Si Δ > 0: dos raíces x₁, x₂ usando la fórmula cuadrática.
  • Si a = 0: reducir a lineal.

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 << "No hay raíces reales\n";
        else if (fabs(delta) < 1e-9) cout << "Raíz doble 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("Ingresa a, b, c: ").split())
if abs(a) < 1e-9:
    print("x =", -c/b)
else:
    delta = b*b - 4*a*c
    if delta < 0:
        print("No hay raíces reales")
    elif abs(delta) < 1e-9:
        print("Raíz doble 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. Sistema de Dos Ecuaciones Lineales

Forma:

ax + by = c
dx + ey = f

Cómo resolver (matemáticas):

  • Usa la regla de Cramer.
  • Determinante: 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 ambos Dx = 0 y Dy = 0 → infinitas soluciones. De lo contrario → no hay solución.
    • Si ambos Dx = 0 y Dy = 0 → infinitas soluciones.
    • De lo contrario → no hay solución.

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 << "Soluciones infinitas\n";
        else cout << "No hay solución\n";
    } else {
        cout << "x = " << Dx/D << ", y = " << Dy/D << "\n";
    }
}

Python:

a, b, c, d, e, f = map(float, input("Ingresa 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("Soluciones infinitas")
    else:
        print("No hay solución")
else:
    x = Dx / D
    y = Dy / D
    print("x =", x, "y =", y)

4. Ecuación Cúbica (ax³ + bx² + cx + d = 0)

Cómo resolver (matemáticas):

  • Método general: usa la fórmula de Cardano.
  • Sustituye para eliminar el término x²: establece x = t - b/(3a).
  • Forma reducida: t³ + pt + q = 0.
  • Discriminante: Δ = (q/2)² + (p/3)³. Si Δ > 0: 1 raíz real, 2 raíces complejas. Si Δ = 0: al menos 2 raíces reales iguales. Si Δ < 0: 3 raíces reales distintas.
    • Si Δ > 0: 1 raíz real, 2 raíces complejas.
    • Si Δ = 0: al menos 2 raíces reales iguales.
    • Si Δ < 0: 3 raíces reales distintas.
  • Honestamente, codificar la fórmula de Cardano en C++ es un poco doloroso. En Python, simplemente podemos usar NumPy.

C++ (simplificado para una raíz real):

#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 << "Una raíz real x = " << x1 << "\n";
    } else {
        cout << "Múltiples raíces reales (necesita la fórmula completa de Cardano)\n";
    }
}

Python (NumPy):

import numpy as np

coeffs = list(map(float, input("Ingresa a, b, c, d: ").split()))
roots = np.roots(coeffs)
print("Raíces:", roots)

Conclusión

Hemos cubierto las matemáticas y el código para resolver ecuaciones lineales, cuadráticas, sistemas 2×2 y cúbicas. C++ construye las fórmulas a mano; Python mantiene las cosas concisas (y NumPy encuentra raíces cúbicas fácilmente). Intenta implementar cada solucionador tú mismo para desarrollar tanto habilidades algebraicas como de programación.