Hey dev, nos ponemos más ingenieriles esta vez y aprenderemos la potencia que podemos aprovechar en C# cuando de cálculo se trata.
El cálculo diferencial es fundamental en múltiples áreas como física, ingeniería, economía y machine learning. Aunque Python domina en este campo gracias a librerías como SymPy, C# también permite trabajar con derivadas, tanto de forma simbólica como numérica, gracias a librerías como Math.NET Symbolics y Math.NET Numerics.
En este artículo te mostraré cómo aplicar cálculo diferencial en C#, con ejemplos reales que puedes usar en simulaciones, visualizaciones o análisis de datos.
Qué librerías tengo en .NET para cálculo diferencial?
- MathNet.Symbolics
- MathNet.Numerics (si instalas Symbolics esta también será añadida automáticamente)
Estas librerías son parte de la iniciativa Math.NET cuya web oficial es esta. Si puedes aportar o compartirla estaría genial porque es una solución muy buena y que necesita apoyo.
Caso real
A continuación te enseñaré cómo utilizar estas librerías mediante un caso realista:
Derivadas en C# para calcular la posición de un cohete en despegue, es decir en ascenso.
El cálculo diferencial es clave en la industria aeroespacial. Uno de los casos más comunes es derivar una función de posición respecto al tiempo para obtener la velocidad y la aceleración de un cohete.
Este artículo usa C# para mostrar un ejemplo completo:
✅ Derivación simbólica con MathNet.Symbolics
✅ Derivación numérica con MathNet.Numerics
Tenemos el caso de un cohete que despega verticalmente desde la Tierra con aceleración constante.
Su posición en metros respecto al tiempo en segundos está dada por la siguiente ecuación:

Donde:
a : Aceleración constante (en m/s²).
V0 : Velocidad inicial (en m/s) en t=0.
S0 : Posición inicial (en metros) en t=0.
Por lo tanto tenemos:

Además:

Donde:
G : Gravedad (9.8 m/s²)
Empuje : Vamos a suponer que los motores del cohete producen un empuje neto de 15 m/s²
Derivemos con la ayuda de C#
Existen dos métodos principales para derivar: el simbólico y el numérico. La derivación simbólica utiliza reglas matemáticas para obtener una fórmula exacta de la derivada, como cuando derivamos manualmente en papel o usamos librerías como Math.NET Symbolics. Por otro lado, la derivación numérica no busca una fórmula, sino que estima el valor de la derivada en un punto específico usando cálculos aproximados, como diferencias finitas. Esta última es muy útil cuando no se tiene una expresión exacta de la función o cuando se trabaja con datos experimentales.
Hagamos un programa en consola e instala la librería mathnet.symbolics:
using MathNet.Symbolics;
double gravedad = 9.8; // m/s² (hacia abajo)
double empujeNeto = 15.0; // m/s² (aceleración neta hacia arriba)
double aceleracionConstante = empujeNeto - gravedad; // 5.2 m/s² netos
//1. Análisis simbólico
var t = SymbolicExpression.Variable("t");
var posicion = 0.5 * aceleracionConstante * t * t; // s(t) = 1/2 * a * t² porque la velocidad inicial es 0
var velocidad = posicion.Differentiate(t); // v(t) = ds/dt (derivada de la posición respecto al tiempo te da velocidad)
var aceleracion = velocidad.Differentiate(t); // a(t) = dv/dt (derivada de la velocidad respecto al tiempo te da aceleracion)
Console.WriteLine("=== Análisis simbólico ===");
Console.WriteLine($"Posición: {posicion}");
Console.WriteLine($"Velocidad: {velocidad}");
Console.WriteLine($"Aceleración: {aceleracion}\n");
// 2. Análisis numérico
double tiempo = 10;
Func<double, double> funcionPosicion = t => 0.5 * aceleracionConstante * t * t;
double DerivarNumericamente(Func<double, double> f, double t, double h = 1e-5)
=> (f(t + h) - f(t - h)) / (2 * h); // Método de diferencias centradas para derivar numéricamente (basado en el Teorema de Taylor)
var velocidadNumerica = DerivarNumericamente(funcionPosicion, tiempo);
Func<double, double> funcionVelocidad = t => DerivarNumericamente(funcionPosicion, t);
var aceleracionNumerica = DerivarNumericamente(funcionVelocidad, tiempo);
Console.WriteLine("=== Análisis numérico ===");
Console.WriteLine($"En t = {tiempo} s:");
Console.WriteLine($"Posición: {funcionPosicion(tiempo):F2} m");
Console.WriteLine($"Velocidad: {velocidadNumerica:F2} m/s");
Console.WriteLine($"Aceleración: {aceleracionNumerica:F2} m/s²\n");
Obtendrás el siguiente resultado:

La parte simbólica usa la librería MathNet.Symbolics para obtener derivadas exactas de la fórmula de posición. Al derivar una vez se obtiene la velocidad, y al derivar una segunda vez se obtiene la aceleración.
Explicación del código
Este código modela el despegue de un cohete usando un enfoque simplificado pero físicamente fundamentado. Considera dos fuerzas clave: el empuje de los motores (15 m/s² hacia arriba) y la gravedad (9.8 m/s² hacia abajo), resultando en una aceleración neta constante de 5.2 m/s². A diferencia de modelos abstractos, este parte de condiciones realistas: velocidad inicial cero (v₀=0) y posición inicial en tierra (s₀=0), siguiendo las ecuaciones básicas del movimiento uniformemente acelerado (s=½at², v=at).
El programa combina análisis simbólico y numérico para calcular posición, velocidad y aceleración. Mediante derivación simbólica (con MathNet.Symbolics) obtiene fórmulas exactas, mientras que con diferencias finitas aproxima valores concretos. Por ejemplo, a los 10 segundos predice: 260 m de altitud, 52 m/s de velocidad (≈187 km/h) y 5.2 m/s² de aceleración constante, valores coherentes con la fase inicial de despegues reales.
Aunque simplificado (no considero la pérdida de masa ni resistencia aerodinámica), este modelo que te presento estimado dev, captura la esencia física fundamental: el equilibrio entre empuje y gravedad, la aceleración resultante y su impacto en el movimiento. Es ideal para entender los principios básicos de dinámica de cohetes, sirviendo como base para extensiones más complejas que incluyan otros factores como masa variable o efectos atmosféricos.
Es una forma poderosa de aplicar programación y matemáticas para entender el comportamiento físico de un sistema en tiempo real.
El siguiente paso podría ser graficarlo, eso te lo contaré en la siguiente entrada en este blog 😉🔥
Si esta entrada te ha gustado compártela crack 🐿️
Créditos de la imagen: Foto de Bill Jelen en Unsplash

Un comentario en «Cálculo Diferencial con C#: Derivadas Simbólicas y Numéricas con Math.NET»