Del campo de velocidades a una trayectoria calculada

En los capítulos anteriores trabajamos con modelos discretos, en los que el estado se actualiza por rondas. Una ecuación como xn+1=F(xn)x_{n+1}=F(x_n) especifica directamente qué estado sigue al anterior. Si el modelo está definido así, no hace falta inventar estados intermedios entre dos rondas. En el capítulo 23 vimos incluso que unir los puntos con segmentos no convierte esa dinámica discreta en una evolución continua.

Ahora el problema cambia. Consideremos una ecuación diferencial ordinaria de primer orden,

dxdt=f(t,x),x(t0)=x0.\frac{dx}{dt}=f(t,x), \qquad x(t_0)=x_0.

La función ff no entrega directamente el estado al cabo de una hora, de un día o de cualquier otro intervalo finito. Especifica la tasa instantánea de cambio en cada punto donde se evalúa. Si existe una solución, debe ser compatible con esas pendientes a lo largo de todo su recorrido. Algunas ecuaciones admiten una expresión analítica cerrada, mientras que muchas otras exigen aproximar la trayectoria mediante procedimientos numéricos.

El método de Euler explícito es la forma más simple de hacer esa aproximación. Rara vez sería el integrador elegido para un problema avanzado. Su valor en este libro es que hace visibles, con muy poca maquinaria, distinciones que acompañarán todo el estudio de los métodos numéricos. Separa el modelo del algoritmo y el error local del global. También permite distinguir la exactitud de la estabilidad, así como las propiedades de la ecuación de las de su discretización. Los textos de análisis numérico lo usan como caso básico para mostrar por qué la consistencia de un método necesita la estabilidad para asegurar la convergencia (Hairer et al., 1993; Iserles, 2008).

En todo el capítulo supondremos, salvo indicación contraria, que el problema de valor inicial está bien planteado y tiene solución única en el intervalo considerado. Así evitaremos atribuir al integrador dificultades que provengan de una ecuación sin solución única o de un modelo mal especificado.

Derivación desde la forma integral

Para una solución suficientemente regular, la ecuación diferencial equivale a

x(tn+1)=x(tn)+∫tntn+1f(s,x(s)) ds.x(t_{n+1})=x(t_n)+ \int_{t_n}^{t_{n+1}} f(s,x(s))\,ds.

Sea h=tn+1−tn>0h=t_{n+1}-t_n>0 el tamaño del paso. La dificultad está en la integral, porque calcularla exactamente exigiría conocer x(s)x(s) dentro del intervalo, que es justamente lo que se busca. Euler explícito reemplaza la tasa variable dentro del intervalo por la tasa evaluada en su extremo izquierdo, es decir, f(s,x(s))≈f(tn,xn)f(s,x(s))\approx f(t_n,x_n). La integral vale entonces aproximadamente hf(tn,xn)h f(t_n,x_n) y se obtiene la regla

xn+1=xn+hf(tn,xn).\boxed{x_{n+1}=x_n+h f(t_n,x_n).}

La misma fórmula aparece al truncar el desarrollo de Taylor después del término lineal. Si la solución tiene dos derivadas continuas, existe un ξn\xi_n entre tnt_n y tn+ht_n+h tal que

x(tn+h)=x(tn)+hx′(tn)+h22x′′(ξn).x(t_n+h)=x(t_n)+h x'(t_n)+\frac{h^2}{2}x''(\xi_n).

Como x′(tn)=f(tn,x(tn))x'(t_n)=f(t_n,x(t_n)), el método conserva los dos primeros términos y descarta el resto.

Llamaremos defecto local de un paso a la diferencia que resulta al insertar la solución exacta en una actualización de Euler. Bajo las condiciones anteriores, ese defecto es de orden O(h2)O(h^2). Algunos textos definen el error local de truncamiento dividiendo el defecto por hh, de modo que lo expresan como O(h)O(h). Ambas convenciones describen el mismo hecho. Usaremos la primera para que no parezca contradictorio afirmar después que el error global de Euler es de primer orden.

El procedimiento tiene una lectura geométrica. Desde (tn,xn)(t_n,x_n) se avanza durante un tiempo hh siguiendo la pendiente que el campo asigna al comienzo del intervalo, mientras que la solución verdadera cambia de pendiente a medida que avanza. Reducir hh permite actualizar esa pendiente con mayor frecuencia.

La afirmación de que un defecto local de orden h2h^2 produce un error global de orden hh puede precisarse. Sea en=x(tn)−xne_n=x(t_n)-x_n el error global y supongamos que ff es Lipschitz respecto de xx, con constante LL, en la región recorrida. Si además ∣x′′(t)∣≤M|x''(t)|\leq M, el defecto local satisface ∣dn+1∣≤Mh2/2|d_{n+1}|\leq Mh^2/2. Al restar la actualización numérica de la identidad exacta se obtiene

en+1=en+h[f(tn,x(tn))−f(tn,xn)]+dn+1.e_{n+1}=e_n+h\big[f(t_n,x(t_n))-f(t_n,x_n)\big]+d_{n+1}.

Por la condición de Lipschitz,

∣en+1∣≤(1+hL)∣en∣+M2h2.|e_{n+1}|\leq(1+hL)|e_n|+\frac{M}{2}h^2.

Si e0=0e_0=0 y tn−t0=nh≤Tt_n-t_0=nh\leq T, la iteración de esta desigualdad da, para L>0L>0,

∣en∣≤Mh2L[(1+hL)n−1]≤Mh2L(eLT−1).|e_n|\leq \frac{M h}{2L}\left[(1+hL)^n-1\right] \leq \frac{M h}{2L}\left(e^{LT}-1\right).

El factor que multiplica a hh depende del horizonte y de cuánto amplifica el campo las diferencias entre trayectorias. La conclusión O(h)O(h) exige, por lo tanto, algo más que contar unos T/hT/h defectos locales, porque también hay que controlar cómo se propagan. Esta observación anticipa la relación entre estabilidad y convergencia. En el caso L=0L=0, la suma directa de los defectos da una cota proporcional a ThTh. Estas cotas suelen ser conservadoras. En el decaimiento de la sección siguiente el campo contrae las diferencias y el error real queda muy por debajo de la cota, como muestra el ejercicio 24.2.

Un problema cuya solución conocemos exactamente

Tomemos el decaimiento lineal

dxdt=−kx,k>0,x(0)=x0,\frac{dx}{dt}=-kx, \qquad k>0, \qquad x(0)=x_0,

cuya solución exacta es x(t)=x0e−ktx(t)=x_0e^{-kt}. Si x0>0x_0>0, la solución permanece positiva y decrece monótonamente hacia cero. Euler produce xn+1=(1−hk)xnx_{n+1}=(1-hk)x_n y, por iteración,

xn=x0(1−hk)n.\boxed{x_n=x_0(1-hk)^n.}

La comparación permite separar con claridad el comportamiento de la ecuación del que introduce el algoritmo.

Con k=1k=1 y h=0,5h=0{,}5, el multiplicador de Euler es 0,50{,}5 y la secuencia es 11; 0,50{,}5; 0,250{,}25; 0,1250{,}125. En esos mismos tiempos la solución exacta vale 11; e−0,5≈0,607e^{-0{,}5}\approx0{,}607; e−1≈0,368e^{-1}\approx0{,}368; e−1,5≈0,223e^{-1{,}5}\approx0{,}223. El método sigue la tendencia correcta, aunque decae demasiado rápido.

Con h=1,5h=1{,}5, en cambio, el multiplicador es 1−h=−0,51-h=-0{,}5 y Euler genera 11; −0,5-0{,}5; 0,250{,}25; −0,125-0{,}125. La magnitud disminuye, pero el signo alterna. Esa oscilación no pertenece a la ecuación x′=−xx'=-x, cuya solución positiva nunca cruza el cero. Es un artefacto numérico que produce el tamaño del paso.

Solución exacta de x′ = −x con x(0) = 1 y aproximaciones de Euler con pasos 0,5 y 1,5.
Figura 24.1. Solución exacta de x′ = −x con x(0) = 1 y aproximaciones de Euler con pasos 0,5 y 1,5. Con h = 0,5, Euler conserva la positividad y el decaimiento monótono. Con h = 1,5, la magnitud disminuye, pero la aproximación alterna de signo, mientras que la solución exacta permanece positiva. Ampliar figura ↗

El ejemplo deshace una confusión frecuente. Una trayectoria numérica puede mostrar un rasgo cualitativo que no existe en el modelo continuo. Quien examinara solo la salida del programa, sin conocer el algoritmo, podría atribuir al sistema una oscilación que introdujo la discretización.

Error local y acumulación del error global

En el decaimiento con k=1k=1, la evolución exacta durante un paso multiplica por

e−h=1−h+h22−h36+⋯ ,e^{-h}=1-h+\frac{h^2}{2}-\frac{h^3}{6}+\cdots,

mientras que Euler multiplica por 1−h1-h. La discrepancia de un paso comienza, por tanto, en h2/2h^2/2. Para llegar a un tiempo fijo TT, sin embargo, se necesitan unos N=T/hN=T/h pasos. La acumulación de muchos defectos locales produce un error global que, bajo hipótesis de suavidad y estabilidad, es de orden O(h)O(h).

Por eso Euler es un método de primer orden. La clasificación es asintótica, porque describe el comportamiento del error cuando hh es suficientemente pequeño. No garantiza que dividir por dos un paso concreto divida exactamente el error por dos. El cuadro 24.1 reúne los resultados para x′=−xx'=-x con x(0)=1x(0)=1 y T=2T=2.

Cuadro 24.1. Método de Euler para x′=−xx'=-x con x(0)=1x(0)=1 en T=2T=2, cuyo valor exacto es e−2≈0,135335283e^{-2}\approx0{,}135335283. El cociente divide el error de la fila anterior por el de la fila actual.

Paso hhPasos NNEuler en T=2T=2Error absolutoCociente de errores
1,000020,0000000000,135335283
0,500040,0625000000,0728352831,858
0,250080,1001129150,0352223682,068
0,1250160,1180670870,0172681962,040
0,0625320,1267887860,0085464972,021

Con los pasos más pequeños, dividir hh por dos divide el error por un factor cercano a dos. En una representación log-log, un error proporcional a hh se aproxima a una recta de pendiente uno (figura 24.2).

Error global de Euler en T = 2 para x′ = −x al reducir el paso.
Figura 24.2. Error global de Euler en T = 2 para x′ = −x al reducir el paso. La línea de referencia es proporcional a h. La alineación de los pasos pequeños ilustra la convergencia de primer orden, que el análisis del método establece de manera general. Ampliar figura ↗

Esa precisión tiene un costo. Para un horizonte fijo, dividir hh por dos duplica aproximadamente el número de evaluaciones de ff. Un método de mayor orden puede alcanzar una precisión dada con menos pasos, aunque cada paso cueste más. El capítulo 25 hará esa comparación.

Reducir indefinidamente el paso tampoco mejora sin límite el resultado en aritmética finita. El error de truncamiento disminuye, pero crece el número de operaciones y los errores de redondeo pueden acumularse (Higham, 2002). En este capítulo trabajamos lejos de ese régimen. Un paso más pequeño mejora el resultado mientras el error de truncamiento domine sobre el de redondeo.

Estabilidad absoluta y decaimiento numérico

Para estudiar la estabilidad numérica se usa la ecuación de prueba y′=λyy'=\lambda y, con λ∈C\lambda\in\mathbb C. Cuando Re⁡(λ)<0\operatorname{Re}(\lambda)<0, la solución exacta y(t)=y0eλty(t)=y_0e^{\lambda t} decae en magnitud. Euler produce

yn+1=(1+hλ)yn=R(z) yn,R(z)=1+z,z=hλ.y_{n+1}=(1+h\lambda)y_n=R(z)\,y_n, \qquad R(z)=1+z, \qquad z=h\lambda.

La función RR se denomina función o factor de amplificación de Euler explícito. Para que la aproximación tienda a cero en este problema lineal se necesita ∣1+hλ∣<1|1+h\lambda|<1. El conjunto de los zz que cumplen ∣1+z∣<1|1+z|<1 es el interior del círculo de radio uno centrado en −1-1 y forma la región de estabilidad absoluta del método para la ecuación de prueba (Ascher y Petzold, 1998; Butcher, 2016; Iserles, 2008).

Con λ=−1\lambda=-1, la condición se reduce a ∣1−h∣<1|1-h|<1, es decir, a 0<h<20<h<2. En h=2h=2 el factor vale −1-1, así que la magnitud no disminuye y la solución numérica alterna indefinidamente. Para h>2h>2 la magnitud crece, aunque la solución exacta decaiga.

Estabilidad absoluta del método de Euler explícito.
Figura 24.3. Estabilidad absoluta del método de Euler explícito. En el panel (a), la región |1 + z| < 1 del plano complejo es el disco de radio 1 centrado en −1. Los puntos marcan z = −h para λ = −1 con h = 0,5; 1,5 y 2,5. En el panel (b), el factor 1 − h para y′ = −y cumple |1 − h| < 1 cuando 0 < h < 2, mientras que la no negatividad exige h ≤ 1. Ampliar figura ↗

Con h=1,5h=1{,}5 el método es estable en ese sentido, porque ∣−0,5∣<1|-0{,}5|<1. Aun así, produce valores negativos y oscilaciones que la solución exacta no tiene. La estabilidad impide el crecimiento artificial de ese modo, pero no garantiza la positividad ni la precisión.

En el decaimiento escalar, la no negatividad exige 1−hk≥01-hk\geq0, es decir, hk≤1hk\leq1. Si hk=1hk=1, la aproximación llega a cero en un solo paso, de modo que conservar la positividad estricta de la solución exacta exige hk<1hk<1. Ambas condiciones son más estrictas que la estabilidad absoluta, 0<hk<20<hk<2. En problemas aplicados, la propiedad que interesa puede restringir el paso aunque el integrador sea formalmente estable.

Estabilidad del método y estabilidad del sistema

El capítulo 10 examinó la estabilidad de un sistema frente a perturbaciones. Aquí aparece una noción relacionada pero distinta, la estabilidad numérica de un esquema. Si la ecuación continua tiene un equilibrio estable y el paso es demasiado grande, Euler puede generar una secuencia divergente. Esa divergencia no demuestra que el equilibrio continuo sea inestable. Indica que el método, con ese paso, no reproduce bien la dinámica cerca del equilibrio.

También puede ocurrir lo contrario. Euler implícito, que estudiaremos en el capítulo 26, reduce paso a paso la amplitud de un oscilador sin rozamiento, aunque el modelo la conserva. Por eso no deben inferirse propiedades del sistema original a partir de una implementación sin haber analizado el algoritmo.

La distinción abarca varios niveles. La estabilidad del modelo continuo depende de sus ecuaciones, mientras que la del método numérico se define respecto de ciertos problemas de prueba y de ciertos pasos. Una implementación puede, además, volverse inestable por errores de código o por efectos de la aritmética finita.

En problemas no lineales, el análisis suele combinar linealizaciones locales con experimentos de refinamiento del paso. Ninguno de esos procedimientos sustituye la comprensión del modelo. Un resultado estable tampoco garantiza que el método haya captado todas las propiedades cualitativas relevantes.

El modelo de dos compartimentos visto como Euler

Volvamos al modelo discreto de dos compartimentos del capítulo 21,

xn+1=(1−α)xn+βyn,yn+1=αxn+(1−β)yn.x_{n+1}=(1-\alpha)x_n+\beta y_n, \qquad y_{n+1}=\alpha x_n+(1-\beta)y_n.

Consideremos ahora un modelo continuo de intercambio,

dxdt=−ax+by,dydt=ax−by,\frac{dx}{dt}=-a x+b y, \qquad \frac{dy}{dt}=a x-b y,

con tasas aa y bb en unidades de tiempo inverso. En forma matricial, z˙=Az\dot z=Az con

A=(−aba−b).A=\begin{pmatrix} -a & b\\ a & -b \end{pmatrix}.

Un paso de Euler de tamaño hh produce zn+1=(I+hA)znz_{n+1}=(I+hA)z_n, es decir,

(xn+1yn+1)=(1−hahbha1−hb)(xnyn).\begin{pmatrix}x_{n+1}\\y_{n+1}\end{pmatrix} = \begin{pmatrix} 1-ha & hb\\ ha & 1-hb \end{pmatrix} \begin{pmatrix}x_n\\y_n\end{pmatrix}.

Si se identifican α=ha\alpha=ha y β=hb\beta=hb, se obtiene exactamente la forma algebraica del modelo discreto.

La coincidencia formal no obliga a dar a ambos la misma interpretación. En un modelo intrínsecamente discreto, α\alpha puede ser la fracción transferida durante una ronda que el propio sistema define. En el modelo continuo discretizado, α=ha\alpha=ha aparece porque se aproximó una tasa continua durante un intervalo numérico hh.

La diferencia se aclara al refinar el paso. Para aproximar el mismo modelo continuo con la mitad del paso, α=ha\alpha=ha y β=hb\beta=hb también deben reducirse a la mitad. Si α\alpha y β\beta se mantienen fijos mientras se declara que hh cambió, cambian las tasas implícitas a=α/ha=\alpha/h y b=β/hb=\beta/h, de modo que ya no se refina la aproximación del mismo sistema.

Los capítulos 21 y 23 dan un ejemplo concreto. Con a=0,2a=0{,}2 y b=0,1b=0{,}1 por día, el paso h=1h=1 día reproduce la configuración A, con fracciones (0,20; 0,10)(0{,}20;\ 0{,}10). El paso h=0,5h=0{,}5 día reproduce la configuración B, con fracciones (0,10; 0,05)(0{,}10;\ 0{,}05), siempre que cada ronda de B dure medio día. Vistas así, A y B dejan de ser dos modelos distintos y pasan a ser dos aproximaciones del mismo modelo continuo. Durante un día, la desviación respecto del equilibrio se multiplica por 0,70{,}7 con el primer paso y por 0,852=0,72250{,}85^2=0{,}7225 con el segundo, mientras que la solución exacta la multiplica por e−0,3≈0,7408e^{-0{,}3}\approx0{,}7408. Al dividir el paso por dos, el error de ese factor pasa de 0,04080{,}0408 a 0,01830{,}0183.

Euler conserva exactamente el total, porque d(x+y)/dt=0d(x+y)/dt=0 y, en la actualización,

(xn+1+yn+1)−(xn+yn)=h[(−ax+by)+(ax−by)]=0.(x_{n+1}+y_{n+1})-(x_n+y_n)=h[(-ax+by)+(ax-by)]=0.

Una aproximación de primer orden puede preservar exactamente un invariante lineal, aunque eso no significa que Euler preserve todas las propiedades del flujo continuo.

La matriz I+hAI+hA transforma todo estado no negativo en otro no negativo si y solo si sus entradas son no negativas, es decir, si ha≤1ha\leq1 y hb≤1hb\leq1. El modo no conservado tiene valor propio continuo −(a+b)-(a+b) y multiplicador de Euler 1−h(a+b)1-h(a+b), cuyo decaimiento exige ∣1−h(a+b)∣<1|1-h(a+b)|<1. Conservar el total no asegura la estabilidad de ese modo ni la no negatividad. Cada una de esas propiedades debe comprobarse por separado.

Paso numérico e intervalo de observación

En el capítulo 23 vimos que una trayectoria bien calculada puede guardarse con una frecuencia que oculta parte de su comportamiento. El paso del integrador y el intervalo de salida no tienen por qué coincidir.

Podríamos integrar una ecuación continua con un paso interno de h=0,01h=0{,}01 días y guardar una observación por día. El archivo resultante tendría un intervalo de salida de un día, aunque el algoritmo habría dado cien pasos internos entre dos filas consecutivas. A la inversa, disponer de datos diarios no autoriza a usar un paso numérico de un día, porque la estabilidad y la exactitud dependen de las escalas temporales del modelo. La frecuencia con que se midieron los datos es otra cuestión.

Tampoco hay que identificar automáticamente hh con un proceso físico de muestreo. En Euler, hh es una decisión numérica para aproximar una ecuación continua. El modelo puede contener además retardos o mediciones discretas con escalas temporales propias.

La separación importa especialmente en modelos clínicos o biológicos. Un proceso puede combinar una variable rápida con otra lenta, mientras las mediciones se hacen con mucha menor frecuencia que ambas. El integrador debe resolver la dinámica que especifican las ecuaciones. La frecuencia de observación responde a otra pregunta, la de qué información hay disponible para contrastar el modelo.

Implementación mínima y prueba de refinamiento

Una implementación vectorial de Euler puede escribirse así.

import numpy as np


def euler(f, t0, x0, h, pasos):
    if not (np.isfinite(h) and h > 0):
        raise ValueError("h debe ser un número finito y positivo.")
    if (isinstance(pasos, (bool, np.bool_))
            or not isinstance(pasos, (int, np.integer))
            or pasos < 0):
        raise ValueError("pasos debe ser un entero no negativo.")

    x0 = np.array(x0, dtype=float, copy=True, ndmin=1)
    t = t0 + h * np.arange(pasos + 1)
    x = np.empty((pasos + 1, x0.size), dtype=float)
    x[0] = x0

    for n in range(pasos):
        pendiente = np.asarray(f(t[n], x[n]), dtype=float)
        if pendiente.shape != x0.shape:
            raise ValueError("f devolvió una forma incompatible.")
        x[n + 1] = x[n] + h * pendiente

    return t, x


t, x = euler(lambda t, x: -x, 0.0, 1.0, 0.25, 8)
print(t[-1], x[-1, 0])

La función comprueba que el paso sea finito y positivo y que el número de pasos sea un entero. Los tiempos se calculan como t0+nht_0+nh, porque sumar hh repetidamente acumula errores de redondeo. Con h=0,1h=0{,}1, diez sumas sucesivas dan 0,99999999999999990{,}9999999999999999, mientras que el producto 10×0,110\times0{,}1 da exactamente 1. Las dos últimas líneas aplican el método al decaimiento con h=0,25h=0{,}25 e imprimen 2.0 0.1001129150390625, el valor del cuadro 24.1 con todas sus cifras.

Para evaluar un integrador no basta con ejecutarlo una vez y observar que la figura parece razonable. Cuando existe una solución conocida, hay que compararla directamente. Cuando no existe, se hacen estudios de refinamiento, que repiten el cálculo con pasos hh, h/2h/2 y h/4h/4 y comprueban si las diferencias disminuyen según el orden esperado, dentro de un régimen donde domina el error de discretización.

En un método de orden pp, el error se comporta como E(h)≈ChpE(h)\approx Ch^p. Si se conoce la solución, el cociente E(h)/E(h/2)E(h)/E(h/2) se aproxima a 2p2^p, que vale 2 en Euler. Sin solución conocida, las diferencias entre aproximaciones sucesivas permiten estimar el orden observado,

pobs≈log⁡2∣xh/2−xh∣∣xh/4−xh/2∣.p_{\mathrm{obs}}\approx\log_2\frac{\left|x_{h/2}-x_h\right|}{\left|x_{h/4}-x_{h/2}\right|}.

Con los valores del cuadro 24.1 para h=0,25h=0{,}25, 0,1250{,}125 y 0,06250{,}0625, las diferencias valen 0,0179540{,}017954 y 0,0087220{,}008722, lo que da pobs≈1,04p_{\mathrm{obs}}\approx1{,}04.

Un orden observado correcto no prueba que el código sea correcto. Dos implementaciones equivocadas pueden mostrar patrones de convergencia parecidos. Por eso el refinamiento se combina con casos de referencia, invariantes, límites conocidos y pruebas unitarias, siguiendo la estrategia de verificación iniciada en los capítulos 21 y 22. El refinamiento tampoco valida el modelo frente a datos reales. Solo estudia si el cálculo converge hacia la solución de las ecuaciones que decidimos resolver.

Qué significa afirmar que Euler «aproxima la solución»

La frase supone varias condiciones que suelen quedar implícitas. Debe existir un problema continuo suficientemente regular y la implementación debe reproducir correctamente el algoritmo. El paso tiene que pertenecer a un régimen compatible con la estabilidad y la exactitud. La comparación, por último, debe hacerse sobre un horizonte y con una norma definidos.

La convergencia es una afirmación sobre un límite. Bajo hipótesis apropiadas, cuando h→0h\to0 con el horizonte fijo, la trayectoria numérica se acerca a la solución exacta. La afirmación nada dice de que una discretización finita concreta sea una versión físicamente fiel del proceso.

La diferencia tiene alcance filosófico, porque el objeto numérico y el objeto matemático no son idénticos. La ecuación diferencial define una dinámica continua idealizada, mientras que Euler define otra dinámica, discreta y dependiente de hh, destinada a aproximarla. Podemos demostrar relaciones entre ambas. Lo que no debemos hacer es borrar la diferencia después de obtener una gráfica convincente.

Este problema también debe separarse de la relación entre el modelo y la realidad. Aunque la ecuación diferencial se resolviera con un error numérico despreciable, podría seguir describiendo mal el fenómeno empírico. Reducir el error del integrador no corrige parámetros mal estimados ni mecanismos equivocados.

Una simulación de un modelo continuo combina, por tanto, al menos tres fuentes de discrepancia. Las ecuaciones pueden describir mal el fenómeno, lo que llamamos error de modelamiento. Los parámetros estimados a partir de datos agregan un error paramétrico. Aproximar la solución introduce, finalmente, el error numérico.

Confundir estas fuentes conduce a diagnósticos equivocados. Si una solución numérica oscila porque el paso es demasiado grande, cambiar la teoría del fenómeno sería una mala respuesta. Si la integración converge pero no reproduce observaciones relevantes, seguir reduciendo hh tampoco resolverá el problema.

Consolidación

El método de Euler explícito parte de una ecuación x′=f(t,x)x'=f(t,x) y reemplaza la evolución continua durante un intervalo hh por una actualización basada en la pendiente al comienzo del intervalo, xn+1=xn+hf(tn,xn)x_{n+1}=x_n+h f(t_n,x_n). Con suficiente regularidad, su defecto local es O(h2)O(h^2) y su error global en un horizonte fijo es O(h)O(h), de modo que es un método de primer orden.

En la ecuación de prueba y′=λyy'=\lambda y, cada paso multiplica por R(hλ)=1+hλR(h\lambda)=1+h\lambda. La condición ∣R∣<1|R|<1 define la región de estabilidad absoluta. Para y′=−yy'=-y, Euler puede ser estable y producir, sin embargo, signos alternantes que la solución exacta no tiene. Ser estable no asegura la precisión ni la positividad de la aproximación.

El modelo discreto de dos compartimentos coincide algebraicamente con un paso de Euler del modelo continuo de intercambio cuando α=ha\alpha=ha y β=hb\beta=hb. La equivalencia depende de la interpretación. Refinar hh con aa y bb fijos exige cambiar α\alpha y β\beta, mientras que mantenerlos fijos define otra familia de modelos. Euler conserva además exactamente el total, lo que muestra que un esquema numérico puede preservar algunos invariantes y violar otras propiedades del flujo.

El capítulo 25 comparará esta aproximación de primer orden con los métodos de Runge-Kutta y con la selección adaptativa del paso. La pregunta ya no será solo si el resultado converge al reducir hh. También importará cuánto trabajo computacional exige alcanzar una precisión especificada.

Ejercicios

Ejercicio 24.1. Aplique el método de Euler a x′=−xx'=-x con x(0)=1x(0)=1 hasta t=3t=3, con pasos h=0,5h=0{,}5 y h=1,5h=1{,}5. (a) Compare los valores en t=1,5t=1{,}5 y t=3t=3 con la solución exacta. (b) ¿Cuál de los dos pasos conserva el signo y la monotonía de la solución? (c) ¿Para qué pasos conserva Euler la positividad estricta en este problema?

Ejercicio 24.2. Para x′=−xx'=-x en [0,2][0,2] con x(0)=1x(0)=1, (a) identifique una constante de Lipschitz LL y una cota MM de ∣x′′∣|x''|. (b) Calcule con h=0,25h=0{,}25 las dos cotas del error global que da el texto y compárelas con el error real del cuadro 24.1. (c) ¿Por qué las cotas son tan conservadoras en este problema?

Ejercicio 24.3. En el modelo continuo de intercambio con a=0,2a=0{,}2 y b=0,1b=0{,}1 por día, (a) calcule el factor exacto por día de la desviación respecto del equilibrio. (b) Calcule el factor de Euler para un día con hh igual a 1; 0,5; 0,25 y 0,1, junto con su error. (c) ¿Para qué pasos es no negativa la matriz I+hAI+hA? ¿Para cuáles es estable el modo no conservado? (d) Describa qué ocurre con h=6h=6 días desde el estado (100,0)(100,0).

Ejercicio 24.4. (a) Determine para qué pasos es estable Euler explícito con λ=−4\lambda=-4 y para cuáles conserva la no negatividad. (b) Repita el análisis de estabilidad con λ=−1+i\lambda=-1+i. (c) Muestre que con λ=i\lambda=i el método es inestable para todo h>0h>0.

Ejercicio 24.5. Con los valores del cuadro 24.1 para h=0,25h=0{,}25, 0,1250{,}125 y 0,06250{,}0625, (a) estime el orden observado sin usar la solución exacta. (b) Calcule la extrapolación 2xh/2−xh2x_{h/2}-x_h con h=0,125h=0{,}125 y compare su error con el de la aproximación con h=0,0625h=0{,}0625. (c) ¿Por qué funciona esa extrapolación?

Ejercicio 24.6. (a) Suponga que la validación de pasos se escribiera como pasos < 0 or int(pasos) != pasos. ¿Qué ocurriría con pasos=30.0? (b) Compare el último tiempo al calcular los tiempos con diez sumas sucesivas de 0,1 y con t0 + h * np.arange(11). (c) ¿Qué comprobación de la función detecta un campo f que devuelve un vector de longitud equivocada?

Consultar las soluciones de los ejercicios

Soluciones de los ejercicios

Solución 24.1. (a) Con h=0,5h=0{,}5, Euler da x(1,5)≈0,125x(1{,}5)\approx0{,}125 y x(3)≈0,015625x(3)\approx0{,}015625. Con h=1,5h=1{,}5 da x(1,5)=−0,5x(1{,}5)=-0{,}5 y x(3)=0,25x(3)=0{,}25. Los valores exactos son e−1,5≈0,223e^{-1{,}5}\approx0{,}223 y e−3≈0,0498e^{-3}\approx0{,}0498. (b) El paso 0,50{,}5 conserva el signo y la monotonía, mientras que el paso 1,51{,}5 produce valores que alternan de signo. (c) La positividad estricta exige 1−h>01-h>0, es decir, 0<h<10<h<1.

Solución 24.2. (a) El campo f(x)=−xf(x)=-x tiene constante de Lipschitz L=1L=1. Como x′′=e−tx''=e^{-t}, se puede tomar M=1M=1. (b) Con n=8n=8 pasos, la primera cota vale (0,25/2)[(1,25)8−1]≈0,620(0{,}25/2)\left[(1{,}25)^8-1\right]\approx0{,}620 y la segunda, (0,25/2)(e2−1)≈0,799(0{,}25/2)(e^2-1)\approx0{,}799. El error real es 0,03520{,}0352, unas 18 y 23 veces menor. (c) El argumento de Lipschitz supone que las diferencias pueden crecer por un factor 1+hL1+hL en cada paso. En este problema el campo las contrae por el factor 1−h1-h, de modo que los defectos de los pasos anteriores se amortiguan.

Solución 24.3. (a) El factor exacto es e−0,3≈0,740818e^{-0{,}3}\approx0{,}740818. (b) Euler da 0,70{,}7; 0,72250{,}7225; 0,7320940{,}732094 y 0,7374240{,}737424, con errores 0,0408180{,}040818; 0,0183180{,}018318; 0,0087240{,}008724 y 0,0033940{,}003394. Dividir el paso por dos divide el error por algo más de dos. Pasar de 0,250{,}25 a 0,10{,}1 lo divide por 2,572{,}57, cerca del cociente de pasos, 2,52{,}5, como corresponde a un método de primer orden. (c) La matriz es no negativa si ha≤1ha\leq1 y hb≤1hb\leq1, es decir, si h≤5h\leq5 días. El modo es estable si ∣1−0,3h∣<1|1-0{,}3h|<1, es decir, si 0<h<20/3≈6,670<h<20/3\approx6{,}67 días. (d) Con h=6h=6 el modo es estable, porque su factor vale −0,8-0{,}8, pero la entrada 1−ha=−0,21-ha=-0{,}2 es negativa. Desde (100,0)(100,0), el primer paso da (−20,120)(-20,120), un estado con una cantidad negativa aunque el total siga siendo 100.

Solución 24.4. (a) La estabilidad exige ∣1−4h∣<1|1-4h|<1, es decir, 0<h<0,50<h<0{,}5. La no negatividad exige 1−4h≥01-4h\geq0, es decir, h≤0,25h\leq0{,}25. (b) Se necesita ∣1+h(−1+i)∣2=(1−h)2+h2<1|1+h(-1+i)|^2=(1-h)^2+h^2<1, que equivale a 2h2−2h<02h^2-2h<0 y se cumple para 0<h<10<h<1. (c) Con λ=i\lambda=i, ∣1+ih∣=1+h2>1|1+ih|=\sqrt{1+h^2}>1 para todo h>0h>0. Por eso Euler explícito hace crecer la amplitud de un oscilador sin rozamiento, como se verá en el capítulo 25.

Solución 24.5. (a) Las diferencias entre aproximaciones sucesivas valen 0,0179540{,}017954 y 0,0087220{,}008722. Su cociente es 2,0592{,}059 y el orden observado, log⁡22,059≈1,04\log_2 2{,}059\approx1{,}04. (b) La extrapolación da 2×0,126788786−0,118067087=0,1355104852\times0{,}126788786-0{,}118067087=0{,}135510485, con un error de 0,0001750{,}000175. La aproximación con h=0,0625h=0{,}0625 tiene un error de 0,0085460{,}008546, unas 49 veces mayor. (c) Si xh≈x+Chx_h\approx x+Ch, la combinación 2xh/2−xh2x_{h/2}-x_h cancela el término de primer orden y deja un error de orden h2h^2. Es la extrapolación de Richardson.

Solución 24.6. (a) El control aceptaría 30.0, porque ese valor es igual a 30. El error aparecería después, al crear un arreglo con un tamaño no entero, con un mensaje que no señala la causa. (b) Las sumas sucesivas dan 0,99999999999999990{,}9999999999999999 y la fórmula t0+nht_0+nh da exactamente 1. (c) La comparación entre la forma de pendiente y la de x0 detiene la ejecución con el mensaje «f devolvió una forma incompatible».

Referencias

Ascher, U. M. y Petzold, L. R. (1998). Computer methods for ordinary differential equations and differential-algebraic equations. Society for Industrial and Applied Mathematics.

Butcher, J. C. (2016). Numerical methods for ordinary differential equations (3.ª ed.). Wiley. https://doi.org/10.1002/9781119121534

Hairer, E., Nørsett, S. P. y Wanner, G. (1993). Solving ordinary differential equations I: Nonstiff problems (2.ª ed. rev.). Springer.

Higham, N. J. (2002). Accuracy and stability of numerical algorithms (2.ª ed.). Society for Industrial and Applied Mathematics. https://doi.org/10.1137/1.9780898718027

Iserles, A. (2008). A first course in the numerical analysis of differential equations (2.ª ed.). Cambridge University Press.