escuela superior politécnica del litoral

Anuncio
187
9.1.2
Fórmula de Euler
El objetivo de los métodos numéricos es proporcionar fórmulas generales y algoritmos que no
dependan de los datos de un problema particular. Las siguientes fórmulas y algoritmos se
pueden especificar independientemente de la forma de una EDO y de su condición inicial, las
cuales se pueden definir desde fuera del algoritmo.
Sea una ecuación diferencial ordinaria explícita de primer orden con una condición en el inicio:
y’(x) = f(x, y), y(x0) = y0
La fórmula de Euler usa los dos primeros términos de la serie de Taylor:
h2
h2
y’’(z) = yi + hf(xi, yi) +
y’’(z), xi ≤ z ≤ xi+1
yi+1 = yi + hy’i +
2!
2!
Definición: Fórmula de Euler
yi+1 = yi + h f(xi ,yi)
xi+1 = xi + h,
h2
2
E=
y’’(z) = O(h ),
2!
i = 0, 1, 2, ...
xi ≤ z ≤ xi+1
(Error de truncamiento en cada paso)
Algoritmo para calcular puntos de la solución de una EDO de primer orden con la
fórmula de Euler
1)
2)
3)
4)
5)
6)
Defina f(x,y) y la condición incial (x0, y0)
Defina h y la cantidad de puntos a calcular m
Para i =1, 2, ..., m
.
yi+1 = yi + h f(xi ,yi)
xi+1 = xi + h
fin
Ejemplo. Obtenga dos puntos de la solución de la siguiente ecuación diferencial con la fórmula
de Euler. Use h = 0.1
2
y’ - y - x + x - 1 = 0, y(0) = 1
Ecuación diferencial
2
y’ = f(x, y) = y - x + x + 1, x0 = 0, y0 = 1, h = 0.1
Cálculo de los puntos
2
i=0:
y1 = y0 + h f(x0, y0) = 1 + 0.1 f(0, 1) = 1 + 0.1 [1 – 0 + 0 + 1] = 1.2000;
x1 = x0 + h = 0 + 0.1 = 0.1
i=1:
y2 = y1 + h f(x1, y1) = 1.2 + 0.1 f(0.1, 1.2) = 1.2 + 0.1 [1.2 – 0.1 + 0.1 + 1] = 1.4290
x2 = x1 + h = 0.1 + 0.1 = 0.2
2
2
Para comprobar comparamos con la solución exacta: y(x) = x + x + e
y(0.1) = 1.2152
y(0.2) = 1.4614
x
El error es muy significativo. Para reducirlo se pudiera reducir h. Esto haría que el error de
truncamiento se reduzca pero si la cantidad de cálculos es muy grande, pudiera acumular error
de redondeo. Una mejor estrategia es usar métodos más precisos que no requieran hacer que
h sea muy pequeño.
188
9.1.3
Error de truncamiento y error de redondeo
2
En cada paso el error de truncamiento es proporcional a h y los resultados no tendrán mucha
precisión:
h2
2
y’’(z) = O(h ),
E=
2!
Para reducir E se debe reducir h: h→ 0 ⇒ E→0. Sin embargo, este hecho matemáticamente
cierto, al ser aplicado tiene una consecuencia importante que es interesante analizar:
Suponer que se desea calcular la solución y(x) en un intervalo fijo x0 ≤ x ≤ xf mediante m
puntos xi = x0, x1, x2, ..., xm espaciados en una distancia h. Enonces la distancia h es:
x − xo
h= f
m
Sea Ei el error de truncamiento en el paso i, entonces
y1 = y0 + h f(x0, y0) + E1
y2 = y1 + h f(x1, y1) + E2 = y0 + hf(x0, y0) + E1+ hf(x1, y1) + E2
= y0 + hf(x0, y0) + hf(x1, y1) + E1 + E2
y3 = y2 + h f(x2, y2) + E3 = y0 + hf(x0, y0) + hf(x1, y1) + hf(x2, y2) + E1 + E2 + E3
...
ym = y0 + hf(x0, y0) + hf(x1, y1) + hf(x2, y2) + . . . + hf(xm-1, ym-1) + E1 + E2 + E3 + ... + Em
El error de truncamiento acumulado es:
E = E1 + E2 + E3 + ... + Em
xf − x0
2
O(h ) = O(h)
h
Lo cual demuestra que el error de truncamiento acumulado es de orden O(h), por lo tanto h
debe ser un valor mas pequeño que el previsto para asegurar que la solución calculada sea
suficientemente precisa hasta el final del intervalo.
2
2
2
2
2
E = O(h ) + O(h ) + O(h ) + . . . + O(h ) = m O(h ) =
Por otra parte, cada vez que se evalúa f(xi, yi) se puede introducir el error de redondeo Ri
debido a los errores en la aritmética computacional y al dispositivo de almacenamiento.
Entonces, el error de redondeo se acumulará en cada paso y al final del intervalo se tendrá:
R = R1 + R2 + R3 + . . . + Rm = m ( R ), siendo R algún valor promedio.
Si m es grande, este error será significativo y puede anular la precisión que se obtuvo
reduciendo el error de truncamiento E usando un valor muy pequeño de h.
Como conclusión de lo anterior, es preferible usar fórmulas cuyo error de truncamiento E sea
de mayor orden para que el valor de h no requiera ser muy pequeño si se buscan resultados
con alta precisión. Esto retardará también el efecto del error de redondeo acumulado R.
189
9.1.4
Instrumentación computacional de la fórmula de Euler
Se define una función que recibe un punto de la solución y entrega el siguiente:
function [x,y] = euler(f, x, y, h)
y=y + h*f(x,y);
x=x+h;
Ejemplo. Escribir un programa en MATLAB para calcular m=20 puntos espaciados en una
distanciah= 0.1 del ejercicio anterior con la fórmula de Euler
f=inline('y - x^2 + x + 1');
x=0;
y=1;
m=20;
h=0.1;
for i=1:m
[x,y]=euler(f,x,y,h);
u(i)=x;
v(i)=y;
end
Si el programa se almacenó con el nombre ed2. Los siguientes comandos permiten visualizar
la solución y compararla con la solución analítica exacta
>> ed2
>> plot(u, v, 'o'), grid on, hold on
>> g=dsolve('Dy-y-x+x^2-1=0','y(0)=1','x')
g=
x+x^2+exp(x)
>> hold on;
>> ezplot(g,0,2);
u, v contienen los puntos calculados
Obtención de la solución analítica.
Solución analítica
Solución analítica y solución numérica para el ejemplo anterior
Se observa la acumulación del error de truncamiento
190
9.1.5
Fórmula mejorada de Euler o fórmula de Heun
Sea la EDO de primer orden con una condición en el inicio: y’(x) = f(x, y), y(x0) = y0
La fórmula de Heun o fórmula mejorada de Euler usa los tres primeros términos de la serie de
Taylor y un artificio para sustituir la primera derivada de f(x, y)
h2
h3
h2
h3
y’’i +
y’’’(z) = yi + hf(xi, yi) +
f’(xi, yi) +
y’’’(z), xi ≤ z ≤ xi+1
yi+1 = yi + hy ’i +
2!
3!
2!
3!
h2
3
yi+1 = yi + hf(xi, yi) +
f’(xi, yi) + O(h )
2
f −f
Para evaluar f’(xi, yi) usamos una aproximación simple: f’i = i + 1 i + O(h)
h
h
h
h2 fi + 1 − fi
3
3
yi+1 = yi + hfi +
[
+ O(h)] + O(h ) = yi + hfi + fi+1 - fi + O(h )
2
2
h
2
h
3
yi+1 = yi + (fi + fi+1) + O(h )
2
Para evaluar fi+1 = f(xi+1, yi+1) se usa yi+1 calculado con la fórmula de Euler como aproximación
inicial:
yi+1 = yi + hf(xi, yi)
h
(f(xi, yi) + f(xi+1, yi+1))
yi+1 = yi +
2
i = 0, 1, 2, ...
xi+1 = xi + h,
Valor usado como una aproximación
Valor mejorado con la fórmula de Heun
Esta fórmula se puede re-escribir como se muestra en la definición:
Definición:
Fórmula de Heun
K1 = hf(xi, yi)
K2 = hf(xi + h, yi + K1)
1
yi+1 = yi + (K1 + K2)
2
i = 0, 1, 2, ...
xi+1 = xi + h,
h3
3
E=
y’’’(z) = O(h ), xi ≤ z ≤ xi+1
3!
(Error de truncamiento en cada paso)
Algoritmo para calcular puntos de la solución de una EDO de primer orden con la
fórmula de Heun
1) Defina f(x,y) y la condición incial (x0, y0)
2) Defina h y la cantidad de puntos a calcular m
3) Para i =1, 2, ..., m
4)
K1 = hf(xi, yi)
5)
K2 = hf(xi + h, yi + K1))
1
.
6)
yi+1 = yi + (K1 + K2)
2
7)
xi+1 = xi + h
8) fin
Ejemplo. Obtener dos puntos de la solución de la siguiente ecuación diferencial con la fórmula
de Heun. Use h = 0.1
2
y’ - y - x + x - 1 = 0, y(0) = 1
191
Ecuación diferencial
2
y’ = f(x, y) = x - x + y + 1, x0 = 0, y0 = 1, h = 0.1
Cálculos
2
i=0:
K1 = hf(x0, y0) = 0.1 f(0, 1) = 0.1 (0 - 0 +1 + 1) = 0.2000;
2
K2 = hf(x0 + h, y0 + K1) = 0.1 f(0.1, 1.2) = 0.1 [ 0.1 – 0.1 + 1.2 +1] = 0.2290
1
y1 = y0 + (K1 + K2) = 1 + 0.5(0.2000 + 0.2290) = 1.2145
2
x1 = x0 + h = 0 + 0.1 = 0.1
i=1:
K1 = hf(x1, y1) = 0.1 f(0.1, 1.2145) = 0.1 (0.1 – 0.1 + 1.2145 + 1) =0.2305;
2
K2 = hf(x1 + h, y1 + K1) = 0.1 f(0.2, 1.4450) = 0.1 [ 0.2 – 0.2 + 1.4450 + 1] = 0.2605
1
y2 = y1 + (K1 + K2) = 1.2145 + 0.5(0.2305 + 0.2605) = 1.4600
2
x2 = x1 + h = 0.1 + 0.1 = 0.2
2
2
Para comprobar comparamos con la solución exacta: y(x) = x + x + e
y(0.1) = 1.2152
y(0.2) = 1.4614
x
El error de truncamiento en cada paso está en el orden de los milésimos, coincidiendo
3
aproximadamente con E=O(h )
9.1.6 Instrumentación computacional de la fórmula de Heun
Se define una función que recibe un punto de la solución y entrega el siguiente:
function [x,y] = heun(f, x, y, h)
k1=h*f(x,y);
k2=h*f(x+h, y+k1);
y=y+0.5*(k1+k2);
x=x+h;
Ejemplo. Escriba un programa en MATLAB para calcular m=20 puntos espaciados en una
distancia h=0.1 del ejercicio anterior usando la fórmula de Heun
f=inline('y - x^2 + x + 1');
x=0;
y=1;
m=20;
h=0.1;
for i=1:20
[x,y]=heun(f,x,y,h);
u(i)=x;
v(i)=y;
end
% La solución es almacenada
% en los vectores u, v
Si el programa se almacenó con el nombre ed3. Los siguientes comandos permiten visualizar
la solución y compararla con la solución analítica exacta
>> ed3
>> plot(u, v, 'o'), grid on, hold on
% u, v contienen los puntos calculados
>> g=dsolve('Dy-y-x+x^2-1=0','y(0)=1','x') % Obtención de la solución analítica.
g=
x+x^2+exp(x)
% Solución analítica de MATLAB
>> ezplot(g,0,2);
192
Solución analítica y solución numérica para el ejemplo anterior
Se observa una reducción significativa del error de truncamiento
9.1.7
Fórmulas de Runge-Kutta
Estas fórmulas utilizan artificios matemáticos para incorporar más términos de la serie de
Taylor. Describimos la más popular, denominada fórmula de Runge-Kutta de cuarto orden, la
cual incluye los cinco primeros términos de la Serie de Taylor.
Sea la ED de primer orden con una condición en el inicio: y’(x) = f(x, y), y(x0) = y0
Definición:
Fórmula de Runge-Kutta de cuarto orden
K1 = hf(xi, yi)
K2 = hf(xi + h/2, yi + K1/2)
K3 = hf(xi + h/2, yi + K2/2)
K4 = hf(xi + h, yi + K3)
1
yi+1 = yi + (K1 + 2K2 + 2K3 + K4)
6
i = 0, 1, 2, ...
xi+1 = xi + h,
h5 (5)
5
E=
y (z) = O(h ), xi ≤ z ≤ xi+1
5!
(Error de truncamiento en cada paso)
Algoritmo para calcular puntos de la solución de una EDO de primer orden con la
fórmula de Runge-Kutta
1) Defina f(x,y) y la condición incial (x0, y0)
2) Defina h y la cantidad de puntos a calcular m
3) Para i =1, 2, ..., m
4)
K1 = hf(xi, yi)
5)
K2 = hf(xi + h/2, yi + K1/2)
6)
K3 = hf(xi + h/2, yi + K2/2)
7)
K4 = hf(xi + h, yi + K3)
1
.
8)
yi+1 = yi + (K1 + 2K2 + 2K3 + K4)
6
9)
xi+1 = xi + h
10) fin
193
Ejemplo. Obtenga un punto de la solución de la siguiente ecuación diferencial con la fórmula
de Runge-Kutta de cuarto orden. Use h = 0.1
2
y’ - y - x + x - 1 = 0, y(0) = 1
Ecuación diferencial
2
y’ = f(x, y) = x - x + y + 1, x0 = 0, y0 = 1, h = 0.1
Cálculo de los puntos
2
i=0:
K1 = hf(x0, y0) = 0.1 f(0, 1) = 0.1 (0 - 0 +1 + 1) = 0.2000;
2
K2 = hf(x0 + h/2, y0 + K1/2) = 0.1 f(0.05, 1.1) = 0.1 (0.05-0.05 +1.1+1) = 0.2148
2
K3 = hf(x0 + h/2, y0 + K2/2) = 0.1 f(0.05, 1.1074) = 0.1 (0.05-0.05 +1.1074+1) = 0.2155
2
K4 = hf(x0 + h, y0 + K3) = 0.1 f(0.1, 1.2155) = 0.1 (0.1-0.1 +1.2155+1) = 0.2305
1
1
y1 = y0 + (K1 + 2K2 + 2K3 + K4 ) = 1 + [0.2 + 2(0.2148)+2(0.2155)+0.2305] = 1.2152
6
6
x1 = x0 + h = 0 + 0.1 = 0.1
2
Para comprobar comparamos con la solución exacta: y(x) = x + x + e
y(0.1) = 1.2152
x
El error de truncamiento en cada paso está en el orden de los cienmilésimos, coincidiendo
5
aproximadamente con E=O(h ). Los resultados tienen una precisión aceptable para la solución
de problemas prácticos, por lo cual esta fórmula es muy utilizada
9.1.8 Instrumentación computacional de la fórmula de Runge-Kutta
Se define una función que recibe un punto de la solución y entrega el siguiente:
function [x,y]=rk4(f, x, y, h)
k1=h*f(x,y);
k2=h*f(x+h/2, y+k1/2);
k3=h*f(x+h/2, y+k2/2);
k4=h*f(x+h, y+k3);
y=y+1/6*(k1+2*k2+2*k3+k4);
x=x+h;
Ejemplo. Un programa en MATLAB para calcular m=20 puntos espaciados en una distancia
h=0.1 del ejercicio anterior usando la fórmula de Runge-Kutta de cuarto orden
f=inline('y - x^2 + x + 1');
x=0;
y=1;
m=20;
h=0.1;
for i=1:m
[x,y]=rk4(f,x,y,h);
u(i)=x;
v(i)=y;
end
Si el programa se almacenó con el nombre ed4. Los siguientes comandos permiten visualizar
la solución y compararla con la solución analítica exacta
>> ed4
>> plot(u, v, 'o'), grid on, hold on
>> g=dsolve('Dy-y-x+x^2-1=0','y(0)=1','x')
g=
x+x^2+exp(x)
>> ezplot(g,0,2);
u, v contienen los puntos calculados
Obtención de la solución analítica.
Solución analítica
194
x x
exp(x)
14
12
10
Solución analítica
8
6
Solución numérica
4
2
0
0
0.2
0.4
0.6
0.8
1
x
1.2
1.4
1.6
1.8
2
Solución analítica y solución numérica para el ejemplo anterior
Encontrar la diferencia entre la solución numérica y analítica cuando x=1
>> yn=v(10)
yn =
4.718276340387802
>> x=1;
>> ya=eval(g)
ya =
4.718281828459046
>> e=yn-ya
e=
-5.488071243675563e-006
Solución numérica en el vector v
Solución analítica
Descargar