Introducción a las Ecuaciones Diferenciales Ordinarias
1. Motivación y nociones básicas
En las Ciencias y la Ingeniería se desarrollan modelos matemáticos para comprender mejor los fenómenos físicos. Muchos de estos modelos provienen de fenómenos de la vida real en los que una magnitud cambia de estado con el tiempo y proporcionan una ecuación que contiene alguna(s) derivada(s) de una función desconocida o incógnita. Esta ecuación es una ecuación diferencial. Si la ecuación contiene derivadas parciales de la función incógnita, la ecuación se denomina ecuación en derivadas parciales (EDP). Si en la ecuación solo aparecen derivadas de una función desconocida de una variable, la ecuación se denomina ecuación diferencial ordinaria. Nos vamos a centrar en este último tipo de ecuaciones.
Más precisamente, una ecuación diferencial ordinaria (EDO, en adelante) es una ecuación que relaciona una función desconocida o incógnita, y(x), con su variable independiente, x, y con una o más de sus derivadas hasta un cierto orden. En muchos casos prácticos, la variable independiente (v.i.) es el tiempo y se denota por t. Nosotros utilizaremos ambas notaciones para la v.i.
Se llama orden de una EDO al orden de la mayor derivada de la función incógnita que aparece en la ecuación.
Ejemplo 1. Las ecuaciones diferenciales
son, respectivamente, de tercer, primer y segundo orden.
En adelante, denotaremos y=y(x), y'=y'(x), y''=y''(x),...
Resolver una EDO consiste en encontrar, si es posible, una función (o funciones) y=y(x) que verifique(n) la EDO para cualquier x en un cierto intervalo real I. Se dirá que dicha función (o funciones) es (son) solución (soluciones) de la EDO en el intervalo I. La resolución de una EDO conlleva el cálculo de alguna integral. Por ello, a la resolución de una EDO también se le llama integración de una EDO. Resaltar que hay EDOs que no tienen solución, como la EDO
2. Un ejemplo sencillo
Ejemplo 2. Resolver (o integrar) la EDO de primer orden
Se trata de hallar una función y=y(x) tal que y'(x) = 2x (o bien \displaystyle \frac{dy}{dx} = 2x) para cualquier x en algún intervalo real I. Es claro que la función y(x) = x^2 es una solución de la ecuación (ed) para cualquier x real. Pero también es solución de (ed) cualquier función de la forma
De hecho, para resolver (ed), basta con integrar
Esta fórmula, que contiene a las infinitas soluciones de (ed), se llama solución general de (ed). Para cada valor de la constante C se obtiene una solución diferente. Cada una de ellas se llama solución particular (o curva integral) de (ed).
Este ejemplo es un caso particular del tipo de EDOs que pasamos a estudiar.
3. La EDO y'=f(x)
Consideramos la EDO de primer orden
donde f es una función continua en su dominio de definición D = Dom \, (f). La fórmula que proporciona el cálculo
integral de las infinitas primitivas de f,
Las primitivas conocidas (que se expresan con un número finito de funciones elementales) se obtienen con cualquier programa razonable de cálculo simbólico. En particular, también con Sage, como veremos.
4. La EDO de primer orden y' = f(x,y)
Las EDOs de primer orden son las más sencillas de estudiar. Las podemos expresar en su forma implícita:
o en su forma normal (o explícita):
Ejemplo 3. La EDO 1 + y^2 + x y y' = 0 se puede escribir en forma normal (sin más que despejar y' de la expresión dada):
Nos centraremos en las EDOs de primer orden escritas en forma normal.
Una solución particular (o curva integral) de la EDO
Ejercicio: Sin hacer uso del ordenador, compruébese que \varphi_1(x)=e^{-2x}+1-2x+2x^2 es una solución en toda la recta real de la EDO
4.1 Obtención con Sage de la solución general de una EDO de primer orden
Los métodos de resolución de EDOs son muy limitados y, en general, no cabe esperar resolver de forma explícita una ecuación diferencial ordinaria cualquiera dada. Se conoce solo una colección finita de tipos de EDOs con método explícito de resolución, como las ecuaciones diferenciales de primer orden lineales (homogéneas y no homogéneas), las de Bernoulli, las exactas, las reducibles a exactas con factor integrante, las homogéneas y algunas reducibles a ellas... La mayoría de ellos están implementados en los programas usuales de cálculo simbólico.
Para resolver con Sage una EDO de primer orden, tenemos que:
donde:
Salida de Sage:
En la mayoría de los casos Sage devuelve la solución en forma implícita. Si el resultado es de la forma y(x)=... (cosa que ocurre para las ecuaciones lineales), devuelve solo el segundo miembro. Las posibles soluciones constantes de las EDOs separables son omitidas.
Observaciones:
a) Al almacenar la ecuación diferencial, póngase cuidado en no confundir la asignación "=" con el signo de igualdad "==".
b) Se pueden añadir otros atributos a la orden desolve.
c) Hay otros métodos de resolución de EDOs con Sage (como desolve_Laplace,...), que no estudiaremos aquí.
4.2. Algunos ejemplos de resolución de EDOs de primer orden
Ejemplo 4. Comenzamos resolviendo la EDO
[x^2 + c, 'linear'] [x^2 + c, 'linear'] |
También podemos resolver la ecuación anterior almacenándola en la forma
[x^2 + c, 'linear'] [x^2 + c, 'linear'] |
x^2 + c x^2 + c |
Ejemplo 5. Es claro que cualquier función de la forma \frac{1}{2} e^{2x} +C es solución de la EDO y' = e^{2x} (de hecho, es su solución general). Lo comprobamos con Sage:
c + 1/2*e^(2*x) c + 1/2*e^(2*x) |
Con desolve podemos resolver ecuaciones diferenciales ordinarias de primer orden, que no sean necesariamente de la forma y'=f(x).
Ejemplo 6. Resolvamos las siguientes EDOs de primer orden:
1) y'= y \qquad 2) y'= 7y\qquad
(ejemplos de ecuaciones de primer orden lineales homogéneas).
[c*e^x, 'linear'] [c*e^x, 'linear'] |
[c*e^(7*x), 'linear'] [c*e^(7*x), 'linear'] |
3) 2y'+y=3 \qquad 4) y'-2xy=x
(ejemplos de ecuaciones de primer orden lineales no homogéneas)
[(c + 3*e^(1/2*x))*e^(-1/2*x), 'linear'] [(c + 3*e^(1/2*x))*e^(-1/2*x), 'linear'] |
[1/2*(2*c - e^(-x^2))*e^(x^2), 'linear'] [1/2*(2*c - e^(-x^2))*e^(x^2), 'linear'] |
5) y' + y = x y^2 (ejemplo de ecuación de Bernoulli)
[e^(-x)/((x + 1)*e^(-x) + c), 'bernoulli'] [e^(-x)/((x + 1)*e^(-x) + c), 'bernoulli'] |
6) yy' + 3x=0 (ejemplo de ecuación de variables separables)
[-1/6*y(x)^2 == 1/2*x^2 + c, 'separable'] [-1/6*y(x)^2 == 1/2*x^2 + c, 'separable'] |
Si la EDO está en forma implícita, como es este caso, al almacenar la ecuación diferencial no es necesario explicitar en el segundo miembro que está igualada a 0. En efecto, podíamos haber hecho:
-1/6*y(x)^2 == 1/2*x^2 + c -1/6*y(x)^2 == 1/2*x^2 + c |
7) y^2y' + y =3 (ejemplo de ecuación autónoma: la v.i. no aparece de manera explícita).
[-1/2*y(x)^2 - 9*log(y(x) - 3) - 3*y(x) == c + x, 'separable'] [-1/2*y(x)^2 - 9*log(y(x) - 3) - 3*y(x) == c + x, 'separable'] |
8) x+y+ (x-y) y'=0 (ejemplo de ecuación exacta: de la forma M(x,y) + N(x,y) y' = 0.)
[1/2*x^2 + x*y(x) - 1/2*y(x)^2 == c, 'exact'] [1/2*x^2 + x*y(x) - 1/2*y(x)^2 == c, 'exact'] |
¡Ojo!
Traceback (click to the left of this block for traceback) ... NotImplementedError: Maxima was unable to solve this ODE. Consider to set option contrib_ode to True. Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "_sage_input_16.py", line 10, in <module>
exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("ZGVzb2x2ZShzcXJ0KHkpKmRpZmYoeSx4KStlXih5KStjb3MoeCktc2luKHgreSk9PTAseSk="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
File "", line 1, in <module>
File "/private/var/folders/p6/p6sKk2QtEEqQa5i2wU6DrE+++TI/-Tmp-/tmpeVIkF1/___code___.py", line 3, in <module>
exec compile(u'desolve(sqrt(y)*diff(y,x)+e**(y)+cos(x)-sin(x+y)==_sage_const_0 ,y)
File "", line 1, in <module>
File "/tmp/sage-map-app/local/lib/python2.6/site-packages/sage/calculus/desolvers.py", line 353, in desolve
raise NotImplementedError, "Maxima was unable to solve this ODE. Consider to set option contrib_ode to True."
NotImplementedError: Maxima was unable to solve this ODE. Consider to set option contrib_ode to True.
|
Traceback (click to the left of this block for traceback) ... NotImplementedError: Maxima was unable to solve this ODE. Consider to set option contrib_ode to True. Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "_sage_input_17.py", line 10, in <module>
exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("ZGVzb2x2ZSgxKyhkaWZmKHkseCkpXjI9PTAseSk="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
File "", line 1, in <module>
File "/private/var/folders/p6/p6sKk2QtEEqQa5i2wU6DrE+++TI/-Tmp-/tmpD5tCJu/___code___.py", line 3, in <module>
exec compile(u'desolve(_sage_const_1 +(diff(y,x))**_sage_const_2 ==_sage_const_0 ,y)
File "", line 1, in <module>
File "/tmp/sage-map-app/local/lib/python2.6/site-packages/sage/calculus/desolvers.py", line 353, in desolve
raise NotImplementedError, "Maxima was unable to solve this ODE. Consider to set option contrib_ode to True."
NotImplementedError: Maxima was unable to solve this ODE. Consider to set option contrib_ode to True.
|
4.3. Problemas de Valor Inicial
donde:
Ejemplo 7. Resolver el problema de valor inicial
(PVI) \quad \left\{ \begin{array}{l} 2y' + y =3, \\ y(1)=3. \end{array} \right.
3 3 |
Se ha obtenido la solución constante y(x)=3, solución definida en toda la recta real. De hecho, la solución y(x)=3 es la única curva integral de la EDO 2y'+y=3 que pasa por el punto (1,3).
¡Ojo! Hay que tener cuidado pues Sage, como otros programas de cálculo simbólico, a veces, comete errores. Hay que pensar en estos programas como ayuda de cálculo, pero hay que utilizarlos con cuidado.
Podemos ver ejemplos de (PVI) que no tienen solución única para los cuales Sage da una única salida como solución.
En efecto, pueden construirse infinitas soluciones del
(PVI) \quad \left\{ \begin{array}{l} y' =y^{2/3} \\ y(0)=0, \end{array} \right.
siendo una de ellas, la función constante y(x)=0 para cada x real, mientras que la salida de Sage es
como comprobamos a continuación:
2*sqrt(y(x)) == x 2*sqrt(y(x)) == x |
De hecho, puede demostrarse que cualquier (PVI) de la forma
(PVI) \quad \left\{ \begin{array}{l} y' =y^{\alpha} \\ y(x_0)=0, \end{array} \right.
con \alpha \in (0,1), tiene infinitas soluciones (una de ellas la solución nula). No lo vemos aquí.
4.4. Dibujando curvas integrales
Ejemplo 8. La solución general o familia de curvas integrales de la EDO \;y'=y\; es
|
|
(nótese que hemos tenido que declarar la variable c). A continuación, como vimos en la Práctica 1, con el método .plot podemos representar varias curvas integrales, por ejemplo,
en el intervalo [-4,4], para los valores c=1,2,3,4,5 (por ejemplo) de la constante c.
|
|
Ejemplo 9. Dibujamos algunas soluciones particulares de la EDO
|
|
Para apreciar mejor el comportamiento de las curvas integrales (o soluciones particulares) cerca del origen, podemos hacer un zoom y representar, por ejemplo, soluciones particulares con la variable dependiente y entre -10 y 10:
|
|
O con un zoom mayor, por ejemplo, con y \in [-2,2]:
|
|
4.5. Campo de direcciones
En general, las soluciones de una EDO de primer orden no se pueden hallar de forma explícita, ni siquiera en el caso lineal (pues las integrales involucradas pueden tener primitivas no elementales). Por ello, se suelen utilizar esquemas gráficos, para visualizar su comportamiento, y métodos numéricos, para aproximar sus valores.
Interpretación geométrica de la solución de un (PVI)
Supongamos dado un
(PVI) \quad \left\{ \begin{array}{l} y'=f(x,y) \\ y(x_0)=y_0, \end{array} \right.
con solución única \varphi(x) en un intervalo real I que contine a x_0 en su interior. En particular, y= \varphi(x) verifica
es decir, la curva y= \varphi(x) pasa por el punto (x_0,y_0) y la pendiente de la recta tangente a y= \varphi(x) que pasa por dicho punto (x_0,y_0) tiene pendiente f(x_0,y_0). De este modo, aunque no conozcamos la expresión explícita de la solución \varphi(x) podemos hacer un esbozo de ella "cerca del punto (x_0,y_0)", dibujando su aproximación lineal mediante un segmento que pase por (x_0,y_0) con pendiente \varphi'(x_0)=f(x_0,y_0).
Si esto lo hacemos con cada punto (x_0,y_0) de un recinto dado del plano, obtenemos el campo direccional o campo de direcciones.
Representación gráfica del campo de direcciones
Los programas usuales de cálculo numérico o simbólico suelen implementar el dibujo de campos direccionales. Sage dibuja el campo de direcciones con la orden plot_vector_field. Veamos su sintaxis con la EDO del ejemplo anterior:
Nota importante: Si la pendiente de la recta tangente a la curva y= \varphi(x) que pasa por el punto (x,y) es f(x, y), un vector director de dicha recta es (1, f(x,y)) o también (\lambda, \lambda f(x,y)) para cualquier \lambda real no nulo. Como en el ejemplo que vamos a tratar es f(x,y) = 2y/x + x^2, se toma en el punto (x,y) el vector director (x, xf(x,y)).
|
|
Podemos también representar gráficamente las curvas integrales junto con el campo de direcciones. Lo hacemos para el mismo ejemplo:
|
|
Representemos ahora en el rectángulo [0,1]\times [0,1] curvas integrales y el campo de direcciones de la EDO
|
|
Finalmente, para la misma EDO, 2y' + y -3 = 0, vamos a representar en el rectángulo [0,8] \times [-2,6] el campo direccional y las curvas integrales (o soluciones particulares) que pasan por los puntos (0,-2), (0,0), (0,2), (0,4) y (0,6).
|
|
4.6. Métodos numéricos de resolución de EDOs de primer orden: Métodos de Euler y de Heun
Nuevamente, supongamos dado un
(PVI) \quad \left\{ \begin{array}{l} y'=f(x,y) \\ y(x_0)=y_0, \end{array} \right.
con solución única \varphi(x) en un intervalo real I que contine a x_0 en su interior. Resolver numéricamente el (PVI) dado consiste en considerar un conjunto finito
de puntos del intervalo I y obtener una aproximación, y_i, del valor exacto \varphi(x_i), para cada i=0,1, \ldots, N. Supondremos que los puntos son equidistantes, es decir,
4.6.1. Método de Euler (o de la tangente):
Conocido y_0, el Método de Euler aproxima \varphi(x_1) mediante y_1 \equiv el valor en x_1 de la recta tangente a la curva y=\varphi(x) en el punto (x_0, y_0), cuya pendiente es \varphi'(x_0) = f(x_0,y_0). Esta recta tangente tiene por ecuación
de donde
\varphi(x_1) \simeq y_1 = y_0 + f(x_0,y_0) (x_1 - x_0) = y_0 + h \cdot f(x_0,y_0) .
El proceso se repite, obteniendo:
\varphi(x_2) \simeq y_2 = y_1+ h \cdot f(x_1,y_1) ,
\varphi(x_3) \simeq y_3 = y_2+ h \cdot f(x_2,y_2)
...
\varphi(x_n) \simeq y_n= y_{n-1}+ h \cdot f(x_{n-1},y_{n-1}) .
Así, el esquema iterativo (o algoritmo) del Método de Euler es:
(Euler) \quad \left\{ \begin{array}{l} \mbox{Conocido } y_0, \\ y_i = y_{i-1}+ h \cdot f(x_{i-1},y_{i-1}), \mbox{ para } i=1, \ldots, N. \end{array} \right.
Para resolver con Sage el (PVI) mediante el Método de Euler, se utiliza la orden eulers_method, cuya sintaxis es:
Al utilizar la orden eulers_method, Sage da como salida tres columnas, en las que aparecen, respectivamente, los valores x_i, \;y_i \; y \;h \cdot f(x_i,y_i) (para i=0,1,\ldots,N).
(PVI) \quad \left\{ \begin{array}{l} y'= 5x + y -5 \\ y(0)=1. \end{array} \right.
Es claro que f(x,y) = 5x + y -5, x_0=0, y_0=1, h = \frac{1}{2} y b= 1 .
x y h*f(x,y)
0 1 -2
1/2 -1 -7/4
1 -11/4 -11/8
x y h*f(x,y)
0 1 -2
1/2 -1 -7/4
1 -11/4 -11/8
|
O bien, con decimales:
x y h*f(x,y)
0 1 -2.00000000000000
0.500000000000000 -1.00000000000000 -1.75000000000000
1.00000000000000 -2.75000000000000 -1.37500000000000
x y h*f(x,y)
0 1 -2.00000000000000
0.500000000000000 -1.00000000000000 -1.75000000000000
1.00000000000000 -2.75000000000000 -1.37500000000000
|
Observamos que Sage devuelve tres columnas, con los valores respectivos de x_i, y_i y h \cdot f(x_i,y_i), para i=0,1,...,N (siendo N=2 en este caso).
(PVI) \quad \left\{ \begin{array}{l} y'= 4y +1 - x \\ y(0)=1, \end{array} \right.
obtener una aproximación de \varphi(1) utilizando el Método de Euler con paso h=0.2, siendo \varphi la única solución del (PVI).
Es claro que ahora f(x,y) = 4y + 1 - x, x_0=0, y_0=1, h = 0.2 (por tanto, N = \displaystyle \frac{b-x_0}{h} = \frac{1 - 0}{0.2}= 5 ) y b= 1. Con Sage obtenemos la aproximación:
x y h*f(x,y)
0 1 1.00000000000000
0.200000000000000 2.00000000000000 1.76000000000000
0.400000000000000 3.76000000000000 3.12800000000000
0.600000000000000 6.88800000000000 5.59040000000000
0.800000000000000 12.4784000000000 10.0227200000000
1.00000000000000 22.5011200000000 18.0008960000000
x y h*f(x,y)
0 1 1.00000000000000
0.200000000000000 2.00000000000000 1.76000000000000
0.400000000000000 3.76000000000000 3.12800000000000
0.600000000000000 6.88800000000000 5.59040000000000
0.800000000000000 12.4784000000000 10.0227200000000
1.00000000000000 22.5011200000000 18.0008960000000
|
o bien con números racionales
x y h*f(x,y)
0 1 1
1/5 2 44/25
2/5 94/25 391/125
3/5 861/125 3494/625
4/5 7799/625 31321/3125
1 70316/3125 281264/15625
x y h*f(x,y)
0 1 1
1/5 2 44/25
2/5 94/25 391/125
3/5 861/125 3494/625
4/5 7799/625 31321/3125
1 70316/3125 281264/15625
|
Aunque Sage tiene implementado el Método de Euler, también puede programarse. Presentamos a continuación una propuesta de programa y lo aplicamos al ejemplo anterior.
|
|
[ 0 0 1] [ 1 1/5 2] [ 2 2/5 94/25] [ 3 3/5 861/125] [ 4 4/5 7799/625] [ 5 1 70316/3125] [ 0 0 1] [ 1 1/5 2] [ 2 2/5 94/25] [ 3 3/5 861/125] [ 4 4/5 7799/625] [ 5 1 70316/3125] |
En la primera columna aparecen los valores i=0,1,\ldots,N (que marcan el número de la iteración en la que estamos); en la segunda, los valores x_i (para i=0,1,\ldots,N); y, en la tercera, las aproximaciones y_i (para i=0,1,\ldots,N) de los valores \varphi(x_i) obtenidos por el Método de Euler que acabamos de programar.
También podemos mostrar las salidas con decimales:
[0.0000000000 0.0000000000 1.000000000] [ 1.000000000 0.2000000000 2.000000000] [ 2.000000000 0.4000000000 3.760000000] [ 3.000000000 0.6000000000 6.888000000] [ 4.000000000 0.8000000000 12.47840000] [ 5.000000000 1.000000000 22.50112000] [0.0000000000 0.0000000000 1.000000000] [ 1.000000000 0.2000000000 2.000000000] [ 2.000000000 0.4000000000 3.760000000] [ 3.000000000 0.6000000000 6.888000000] [ 4.000000000 0.8000000000 12.47840000] [ 5.000000000 1.000000000 22.50112000] |
4.6.2. Método de Heun (o Método de Euler modificado)
Conocido y_0, el Método de Heun propone aproximar \varphi(x_1) utilizando, en lugar de la recta tangente a la curva y = \varphi (x) en el punto (x_0,y_0), la recta que pasa por el punto (x_0,y_0) que tiene por pendiente la media aritmética de las pendientes de las rectas tangentes a y = \varphi (x) en los puntos (x_0, y_0) y (x_1, \widehat{y}_1) , donde \widehat{y}_1 = y_0 + h \cdot f(x_0, y_0) (el que se obtiene a partir de y_0 mediante el Método de Euler). Es decir, mediante el Método de Heun, se aproxima \varphi(x_1) por y_1 \equiv el valor en x_1 de la recta que pasa por el punto (x_0,y_0) y tiene pendiente
El proceso se repite para i=1, \ldots, N, obteniendo el siguiente esquema iterativo (o algoritmo) del Método de Heun:
(Heun) \quad \left\{ \begin{array}{l} \mbox{Conocido } y_0, \\ \displaystyle y_i = y_{i-1}+ h \cdot \frac{ f(x_{i-1},y_{i-1}) + f(x_i, \widehat{y}_i) }{2}, \quad \mbox{para } i=1, \ldots, N, \quad \mbox{donde} \quad \widehat{y}_i = y_{i-1}+ h \cdot f(x_{i-1},y_{i-1}). \end{array} \right.
Una propuesta de programación con Sage del Método de Heun es la siguiente:
|
|
Lo aplicamos al método anterior, obteniendo:
[ 0 0 1] [ 1 1/5 119/50] [ 2 2/5 3281/625] [ 3 3/5 352411/31250] [ 4 4/5 9374829/390625] [ 5 1 994434999/19531250] [ 0 0 1] [ 1 1/5 119/50] [ 2 2/5 3281/625] [ 3 3/5 352411/31250] [ 4 4/5 9374829/390625] [ 5 1 994434999/19531250] |
O bien con cifras decimales:
[0.000000000000000 0.000000000000000 1.00000000000000] [ 1.00000000000000 0.200000000000000 2.38000000000000] [ 2.00000000000000 0.400000000000000 5.24960000000000] [ 3.00000000000000 0.600000000000000 11.2771520000000] [ 4.00000000000000 0.800000000000000 23.9995622400000] [ 5.00000000000000 1.00000000000000 50.9150719488000] [0.000000000000000 0.000000000000000 1.00000000000000] [ 1.00000000000000 0.200000000000000 2.38000000000000] [ 2.00000000000000 0.400000000000000 5.24960000000000] [ 3.00000000000000 0.600000000000000 11.2771520000000] [ 4.00000000000000 0.800000000000000 23.9995622400000] [ 5.00000000000000 1.00000000000000 50.9150719488000] |
4.6.3. Errores de aproximación mediante los Métodos de Euler y de Heun
Puede demostrarse:
donde
Puesto que el paso h>0 está destinado a ser pequeño, el Método de Heun supone una mejora con respecto al Método de Euler.
Por otro lado, si se conoce la solución exacta \varphi(x) del (PVI), se pueden calcular los errores locales exactos
Podemos modificar ligeramente los anteriores programas realizados con Sage para el cálculo de las aproximaciones mediante los Métodos de Euler y de Heun e incluir en la salida una cuarta columna que contenga los errores locales cometidos en cada iteración.
A continuación damos una propuesta de programación con Sage del Método de Euler mostrando las aproximaciones y_i (i=0,1,\ldots,N) y los errores locales correspondientes, y lo aplicamos al Ejemplo 11.
|
|
[0.000000000000000 0.000000000000000 1.00000000000000 0.000000000000000] [ 1.00000000000000 0.200000000000000 2.00000000000000 0.505329852584806] [ 2.00000000000000 0.400000000000000 3.76000000000000 2.03422600396920] [ 3.00000000000000 0.600000000000000 6.88800000000000 6.16452195201190] [ 4.00000000000000 0.800000000000000 12.4784000000000 16.6664796090674] [ 5.00000000000000 1.00000000000000 22.5011200000000 42.3966831643588] [0.000000000000000 0.000000000000000 1.00000000000000 0.000000000000000] [ 1.00000000000000 0.200000000000000 2.00000000000000 0.505329852584806] [ 2.00000000000000 0.400000000000000 3.76000000000000 2.03422600396920] [ 3.00000000000000 0.600000000000000 6.88800000000000 6.16452195201190] [ 4.00000000000000 0.800000000000000 12.4784000000000 16.6664796090674] [ 5.00000000000000 1.00000000000000 22.5011200000000 42.3966831643588] |
Análogamente, presentamos una propuesta de programación con Sage del Método de Heun mostrando las aproximaciones y_i (i=0,1,\ldots,N) y los errores locales correspondientes, y lo aplicamos al Ejemplo 11.
|
|
[0.0000000000 0.0000000000 1.000000000 0.0000000000] [ 1.000000000 0.2000000000 2.380000000 0.1253298526] [ 2.000000000 0.4000000000 5.249600000 0.5446260040] [ 3.000000000 0.6000000000 11.27715200 1.775369952] [ 4.000000000 0.8000000000 23.99956224 5.145317369] [ 5.000000000 1.000000000 50.91507195 13.98273122] [0.0000000000 0.0000000000 1.000000000 0.0000000000] [ 1.000000000 0.2000000000 2.380000000 0.1253298526] [ 2.000000000 0.4000000000 5.249600000 0.5446260040] [ 3.000000000 0.6000000000 11.27715200 1.775369952] [ 4.000000000 0.8000000000 23.99956224 5.145317369] [ 5.000000000 1.000000000 50.91507195 13.98273122] |
Finalmente, presentamos dos animaciones. La primera muestra gráficamente la solución exacta, \varphi(x) y la poligonal que une los puntos (x_i,y_i) (para i=0,1,\ldots,N), donde cada y_i es la aproximación de \varphi(x_i) que proporciona el Método de Euler. Nótese que en la ventana interactiva hay que introducir el segundo miembro de la EDO, f(x,y), y la solución exacta del (PVI), \varphi(x).
Estudiaremos dos m\'etodos: el de Euler y el de Heun, para resolver num\'ericamente:
y(x_0)=y_0 \end{array} \right.
Ambos m\'etodos tratan de buscar una aproximaci\'on a la soluci\'on exacta
y=\varphi(x) para una sucesi\'on discreta de puntos. \
Esto es, se pretende dar una aproximaci\'on del valor y_i = \varphi(x_i) para los
valores:
donde el paso h > 0. \
As\'i, obtendremos el valor aproximado de y_i = \varphi(x_i) a partir de
y_{i-1}.
Estudiaremos dos m\'etodos: el de Euler y el de Heun, para resolver num\'ericamente:
y(x_0)=y_0 \end{array} \right.
Ambos m\'etodos tratan de buscar una aproximaci\'on a la soluci\'on exacta
y=\varphi(x) para una sucesi\'on discreta de puntos. \
Esto es, se pretende dar una aproximaci\'on del valor y_i = \varphi(x_i) para los
valores:
donde el paso h > 0. \
As\'i, obtendremos el valor aproximado de y_i = \varphi(x_i) a partir de
y_{i-1}.
He encontrado también algunos interact@, pero son un "tochaco"...
Partimos de (x_0, y_0). Heun propone utilizar, en vez de la tangente, el promedio en los puntos: \D \frac{f(x_0, y_0)+f(x_1, \widehat{y}_1)}{2} , donde \widehat{y}_1 = y_0 + h(f(x_0, y_0) se obtiene por Euler.
Procediendo as\'{\i} sucesivamente, obtenemos el siguiente esquema iterativo:
y_0 = y_0 \\
y_{n} = y_{n-1} + h \, \D \frac{f(x_{n-1}, y_{n-1})+f(x_n, \widehat{y}_n)}{2} ,
\; n=1, 2, \ldots
\end{array} \right.
donde \widehat{y}_n = y_{n-1} + h \, f(x_{n-1}, y_{n-1}) es el obtenido al aplicar Euler.
También he encontrado algunos interact@, pero son un "tochazo".
Mostramos finalmente dos animaciones. La primera animación muestra gráficamente la solución exacta y las aproximaciones que proporciona el Método de Euler (nótese que hay que introducir la función f(x,y) y la solución exacta \varphi(x)).
Finalmente, mostramos dos animaciones. La primera muestra gráficamente la solución exacta y la poligonal que se obtiene uniendo los puntos (x_i,y_i) (para i=0,1,\ldots,N), donde cada y_i es la aproximación del valor exacto \varphi(x_i) que proporciona el Método de Euler. Lo aplicamos al Ejemplo 11 (nótese que hay que introducir la función f(x,y) y la solución exacta \varphi(x))..
Click to the left again to hide and once more to show the dynamic interactive window |
Obsérvese cómo al aumentar el número de pasos (desplazando la barra a la derecha), es decir, al disminuir el paso h, la aproximación mejora.
La segunda animación muestra gráficamente la solución exacta, \varphi(x), y las aproximaciones de los valores \varphi(x_i) proporcionados por el Método de Euler, el Método de Heun y el Método de Runge-Kutta de 4º orden (que no estudiamos aquí). Nótese que en la ventana interactiva hay que introducir nuevamente la función f(x,y) y la solución exacta \varphi(x).
Click to the left again to hide and once more to show the dynamic interactive window |