🧮 Computational Mathematics

Inicio · Parte 11 — Métodos numéricos y computación científica

239 — Computación científica con SciPy

cientifico clase 19 de 20 4 horas demostración scientific_computing

Se implementa a mano para saber cuándo la biblioteca falla, y se usa la biblioteca para producción.

Fórmulas

bisección → scipy.optimize.brentq
RK4 → scipy.integrate.solve_ivp
cuadratura → scipy.integrate.quad

Desarrollo

SciPy implementa versiones de todos los métodos de esta parte, y con mejor calidad de la que se puede alcanzar en un curso: control adaptativo del paso, detección de rigidez, selección automática de algoritmo, estimación de error y décadas de código Fortran probado debajo.

La pregunta legítima es entonces por qué implementarlos a mano. La respuesta es que usar un método sin entenderlo impide saber cuándo falla. solve_ivp con opciones por defecto puede devolver resultados sin sentido en un problema rígido, y solo quien sabe qué es la rigidez interpretará el aviso y cambiará a method='BDF'. La biblioteca no protege de la ignorancia del usuario.

Hay además una razón de diagnóstico. Cuando un cálculo produce números extraños, saber distinguir entre un error de modelado, un problema mal condicionado, una tolerancia mal puesta y un fallo real de la biblioteca exige entender el algoritmo. Sin ese conocimiento, el único recurso es probar opciones al azar.

La regla práctica es clara: implementar para aprender, usar la biblioteca para producir. Reescribir un integrador en código de producción es reintroducir errores que SciPy resolvió hace veinte años. El motor de esta parte no depende de SciPy precisamente para que las implementaciones didácticas sean legibles y ejecutables en cualquier entorno.

Ejemplo trabajado

Correspondencia entre lo implementado y su equivalente en SciPy.

SciPy 1.17.1 disponible en este entorno

implementación propia        equivalente en SciPy
---------------------------------------------------------
bisection                    scipy.optimize.brentq
newton_raphson               scipy.optimize.newton
lagrange_interpolation       scipy.interpolate.lagrange
splines                      scipy.interpolate.CubicSpline
trapezoid_rule               scipy.integrate.trapezoid
simpson_rule                 scipy.integrate.simpson
quadrature                   scipy.integrate.quad
direct_linear_solvers        scipy.linalg.lu_solve
jacobi_gauss_seidel          scipy.sparse.linalg.cg
numerical_least_squares      scipy.linalg.lstsq
euler_method / runge_kutta   scipy.integrate.solve_ivp

Este motor no requiere SciPy: todas las implementaciones
son de biblioteca estándar y ejecutables sin dependencias.

Qué calcula el laboratorio

Qué aporta SciPy sobre una implementación propia.

python classes/part-11-metodos-numericos-y-computacion-cientifica/239-computacion-cientifica-con-scipy/lab.py
compmath run 239

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "scipy_instalado": false,
  "version": null,
  "equivalencias": {
    "bisection": "scipy.optimize.brentq",
    "newton_raphson": "scipy.optimize.newton",
    "quadrature": "scipy.integrate.quad",
    "runge_kutta": "scipy.integrate.solve_ivp",
    "least_squares": "scipy.linalg.lstsq",
    "splines": "scipy.interpolate.CubicSpline"
  },
  "por_que_implementar_a_mano": "para saber cuándo la biblioteca miente o falla",
  "por_que_usar_la_biblioteca": "estabilidad, control de error y rendimiento probados",
  "este_motor_no_requiere_scipy": true
}

Errores comunes

Dónde se usa

Elección de herramientas en proyectos científicos, depuración de cálculos numéricos, validación cruzada entre implementaciones y decisiones de rendimiento.

Idea rectora de la parte

El orden de un método de integración predice cómo cae el error con el paso.

Error a evitar

Usar tolerancia absoluta cuando la escala del problema es grande.

Conexión con IA

Los Neural ODE, los samplers de difusión y los optimizadores de segundo orden son métodos numéricos con parámetros aprendidos.

Bibliografía de la clase

Archivos de la clase