05 EDOs
05 EDOs
05 EDOs
𝜕𝑓
Si 𝑓(𝑥, 𝑦) y existe y ambas son funciones continuas en un rectángulo que incluye a (𝑥0 , 𝑦0 ), entonces existe un intervalo
𝜕𝑦
suficientemente pequeño 𝐼 =]𝑥0 − 𝛿, 𝑥0 + 𝛿[ con 𝛿 > 0 tal que el P.V.I. tiene solución única en 𝐼.
𝑑𝑦 −2𝑥𝑦
=
𝑑𝑥 𝑥 2 − 𝑥𝑦
2𝑥𝑦
𝑑𝑦 − 2
= 𝑥
𝑑𝑥 𝑥 2 − 𝑥𝑦
𝑥2
𝑦
𝑑𝑦 −2 𝑥 𝑦
= 𝑦 = 𝑓 ( ) EDH
𝑑𝑥 1 − 𝑥
𝑥
𝑦 𝑑𝑦 𝑑𝑧
Cambio de variable: 𝑧 = → 𝑦 = 𝑥𝑧 → =𝑧+𝑥
𝑥 𝑑𝑥 𝑑𝑥
1 2
1−𝑧 1−𝑧 − − 1 2
3 3
La primera integral: ∫ 𝑑𝑧 = ∫ 𝑑𝑧 = ∫ + 𝑑𝑧 = − ln 𝑧 − ln(𝑧 − 3)
−3𝑧+𝑧 2 𝑧(𝑧−3) 𝑧 𝑧−3 3 3
𝑑𝑥
Segunda integral: ∫ = ln 𝑥
𝑥
1 2
⟹ − ln 𝑧 − ln(𝑧 − 3) = ln 𝑥 + 𝐶
𝑦
3 3
Reemplazar 𝑧 = :
𝑥
1 𝑦 2 𝑦
− ln − ln ( − 3) = ln 𝑥 + ln 𝐶 ,∗ (−3)
3 𝑥 3 𝑥
𝑦 𝑦
ln + 2 ln ( − 3) = −3 ln 𝐶𝑥
𝑥 𝑥
𝑦 𝑦 2
ln [ ( − 3) ] = ln 𝐶𝑥 −3
𝑥 𝑥
𝑦 𝑦 2
( − 3) = 𝐶𝑥 −3
𝑥 𝑥
𝑦 𝑦 − 3𝑥 2 𝐶
( ) = 3
𝑥 𝑥 𝑥
𝑦(𝑦 − 3𝑥)2 = 𝐶
2
Condición inicial: 𝑦(1) = 2: 2(2 − 3(1)) = 𝐶 → 2 = 𝐶
𝑦(𝑦 − 3𝑥)2 = 2
Comprobación:
[𝑦(𝑦 − 3𝑥)2 ]𝑥 = [2]𝑥
b) Exactas:
𝑀(𝑥, 𝑦)𝑑𝑥 + 𝑁(𝑥, 𝑦)𝑑𝑦 = 0
Siendo 𝑀𝑦 = 𝑁𝑥
Para resolver:
Se conoce que existe 𝑧 = 𝑓(𝑥, 𝑦) tal que 𝑑𝑧 = 𝑓𝑥 𝑑𝑥 + 𝑓𝑦 𝑑𝑦 = 𝑀𝑑𝑥 + 𝑁𝑑𝑦 = 0 → 𝑧 = 𝑘
𝑓𝑥 = 𝑀 𝑓 = ∫ 𝑀𝑑𝑥
{ →{ ⟹ 𝑧 = 𝑓(𝑥, 𝑦) = 𝑘
𝑓𝑦 = 𝑁 𝑓 = ∫ 𝑁𝑑𝑦
𝑥2
Ejemplo. Resolver el P.V.I. (𝑥 2 + 𝑥𝑦)𝑑𝑥 + 𝑑𝑦 = 0, 𝑦(2) = 1
2
𝑥2
Es exacta ya que 𝑀 = 𝑥 2 + 𝑥𝑦, 𝑁 = 𝑀𝑦 = 𝑥 = 𝑁𝑥
2
Existe 𝑧 = 𝑓(𝑥, 𝑦) tal que 𝑑𝑧 = 𝑓𝑥 𝑑𝑥 + 𝑓𝑦 𝑑𝑦 = 𝑀𝑑𝑥 + 𝑁𝑑𝑦 = 0 → 𝑧 = 𝑘
𝑥 3 𝑥 2𝑦
𝑓𝑥 = 𝑀 = 𝑥 2 + 𝑥𝑦 𝑓 = ∫ 𝑥 2 + 𝑥𝑦𝑑𝑥 = + + 𝐶(𝑦)
3 2 𝑥 3 𝑥 2𝑦
{ 𝑥2 → ⟹ 𝑧 = 𝑓(𝑥, 𝑦) = + =𝑘
𝑓𝑦 = 𝑁 = 𝑥2 𝑥2𝑦 3 2
2 { 𝑓=∫ 𝑑𝑦 = + 𝐶(𝑥)
2 2
23 1 8 14
Condión inicial 𝑦(2) = 1 → + 22 ⋅ = 𝑘 → + 2 = = 𝑘
3 2 3 3
𝑥 3 𝑥 2 𝑦 14
+ =
3 2 3
2𝑥 3 + 3𝑥 2 𝑦 = 28
28 − 2𝑥 3
𝑦=
3𝑥 2
c) Lineales.
𝑑𝑦
+ 𝑃(𝑥)𝑦 = 𝑄(𝑥)
𝑑𝑥
Para resolver: factor integrante 𝜇 = 𝑒 ∫ 𝑃(𝑥)𝑑𝑥
1
𝑦= [∫ 𝜇𝑄(𝑥)𝑑𝑥 + 𝐶]
𝜇
𝑑𝑦
Ejemplo. + cos 𝑥 𝑦 = 2cos 𝑥
𝑑𝑥
𝜇 = 𝑒 ∫ 𝑃(𝑥)𝑑𝑥 = 𝑒 ∫ cos 𝑥𝑑𝑥=sin 𝑥 = 𝑒 sin 𝑥
1
𝑦 = [∫ 𝜇𝑄(𝑥)𝑑𝑥 + 𝐶]
𝜇
𝑦 = 𝑒 −sin 𝑥 [∫ 𝑒 sin 𝑥 2cos 𝑥 𝑑𝑥 + 𝐶 ]
𝑦 = 𝑒 −sin 𝑥 [𝑒 sin 𝑥 2 + 𝐶]
𝑦 = 2 + 𝐶𝑒 − sin 𝑥
d) Separables.
𝑑𝑦
= 𝑓(𝑥)𝑔(𝑦)
𝑑𝑥
1
⟹∫ 𝑑𝑥 = ∫ 𝑔(𝑦)𝑑𝑦
𝑓(𝑥)
𝑑𝑦 𝑥𝑦+2𝑦−𝑥−2
Ejemplo.
𝑑𝑥
= 𝑥𝑦−3𝑦+𝑥−3 ; 𝑦(4) = 2
𝑑𝑦 (𝑥 + 2)𝑦 − (𝑥 + 2)
=
𝑑𝑥 (𝑥 − 3)𝑦 + 𝑥 − 3
𝑑𝑦 (𝑥+2)(𝑦−1)
𝑑𝑥
= (𝑥−3)(𝑦+1) ED separable
𝑦+1 𝑥+2
∫ 𝑑𝑦 = ∫ 𝑑𝑥
𝑦−1 𝑥−3
𝑦+1 𝑦−1
−𝑦 + 1 1
(2)
𝑥+2 𝑥−3
−𝑥 + 3 1
(5)
2 5
∫1 + 𝑑𝑦 = ∫ 1 + 𝑑𝑥
𝑦−1 𝑥−3
𝑦 + 2 ln(𝑦 − 1) = 𝑥 + 5 ln(𝑥 − 3) + 𝐶
𝑦 − 𝑥 − 𝐶 = 5 ln(𝑥 − 3) − 2 ln(𝑦 − 1)
𝑦 − 𝑥 − 𝐶 = ln(𝑥 − 3)5 − ln(𝑦 − 1)2
(𝑥 − 3)5
𝑦 − 𝑥 − 𝐶 = ln
(𝑦 − 1)2
(4−3)5
Condición inicial 𝑦(4) = 2: 2 − 4 − 𝐶 = ln (2−1)2 → 𝐶 = −2
(𝑥 − 3)5
𝑦 − 𝑥 + 2 = ln
(𝑦 − 1)2
e) Bernoulli.
𝑑𝑦
+ 𝑃(𝑥)𝑦 = 𝑄(𝑥)𝑦 𝑛 , 𝑛 ∈ ℝ − {−1,0}
𝑑𝑥
𝑑𝑧 𝑑𝑦
Para resolver plantear 𝑧 = 𝑦1−𝑛 → = (1 − 𝑛)𝑦 −𝑛 ⋅
𝑑𝑥 𝑑𝑥
Luego multiplicar la ecuación diferencial por (1 − 𝑛)𝑦 −𝑛 para obtener:
𝑑𝑦
(1 − 𝑛)𝑦 −𝑛 1−𝑛 ( )
+ (1 − 𝑛) 𝑦⏟ 𝑃 𝑥 = (1 − 𝑛)𝑄(𝑥)
⏟ 𝑑𝑥 𝑧
𝑑𝑧
𝑑𝑥
𝑑𝑧
+ (1 − 𝑛)𝑃(𝑥)𝑧 = (1 − 𝑛)𝑄(𝑥)
𝑑𝑥
Esta última ecuación es de tipo lineal que ya se sabe resolver.
1 𝑑𝑦
Ejemplo. 𝑦(1) = ; 𝑥 − (1 + 𝑥)𝑦 = 𝑥𝑦 2 ÷𝑥
2 𝑑𝑥
𝑛
𝑑𝑦 1+𝑥
−
𝑑𝑥 ⏟ 𝑥
𝑦 1 𝑦 ⏞2 ED de Bernoulli
= ⏟
𝑄(𝑥)
𝑃(𝑥)
Sea 𝑧 = 𝑦1−𝑛 → 𝑧 = 𝑦1−2 → 𝑧 = 𝑦 −1 Integrando:
𝑑𝑧 𝑑𝑦
= −1𝑦 −2 ⋅ 𝑥 𝑒 𝑥 𝑧 = − ∫ 𝑥𝑒 𝑥 𝑑𝑥
𝑑𝑥 𝑑𝑥
Multiplicando la ED por −1𝑦 −2:
𝑥 𝑒 𝑥 𝑧 = − [𝑥𝑒 𝑥 − ∫ 1𝑒 𝑥 𝑑𝑥]
𝑑𝑦 1 + 𝑥 −1
−1𝑦 −2 + 𝑦⏟ = −1 𝑥𝑒 𝑥 𝑧 = −𝑥𝑒 𝑥 + 𝑒 𝑥 + 𝐶
⏟ 𝑑𝑥 𝑥
𝑧
𝑑𝑧/𝑑𝑥 Devolviendo 𝑧 = 𝑦 −1:
𝑑𝑧 1+𝑥 1
𝑑𝑥
+ 𝑥
𝑧 = −1 ED Lineal (EDL) 𝑥𝑒 𝑥 𝑦 −1 = −𝑥𝑒 𝑥 + 𝑒 𝑥 + 𝐶 ⋅ 𝑒 −𝑥
1+𝑥
𝑑𝑥 𝑥
Factor integrante: 𝜇 = 𝑒 ∫ 𝑥 = 1 𝐶𝑒 −𝑥
1
∫𝑥+1𝑑𝑥
𝑦 −1 = −1 + +
𝑒 = 𝑒 ln 𝑥+𝑥 = 𝑒 ln 𝑥 𝑒 𝑥 = 𝑥𝑒 𝑥 , 𝑥 > 𝑥 𝑥
0 𝑦 −1
Multiplicando la EDL por 𝜇: −𝑥 + 1 + 𝐶𝑒 −𝑥
= elevando a la (−1)
𝑑𝑧 1+𝑥 𝑥
𝑥𝑒 𝑥 + 𝑥𝑒 𝑥 𝑧 = −𝑥𝑒 𝑥 𝑥
𝑑𝑥 𝑥 𝑦=
𝑑𝑧 𝑑(𝑥 𝑒 𝑥 ) 𝑥 + 1 + 𝐶𝑒 −𝑥
𝑥𝑒 𝑥 + ⋅ 𝑧 = −𝑥𝑒 𝑥 La condición inicial es:
𝑑𝑥 𝑑𝑥 1 1
𝑦(1) = : =
1 1
→ =
1
→𝐶=0
2 2 1+1+𝐶𝑒−1 2 2+𝐶𝑒−1
𝑥 𝑥
𝑑(𝑥 𝑒 𝑧) 𝑦=
= −𝑥𝑒 𝑥 𝑥+1
𝑑𝑥
5.2 Método de Euler y cálculo del error de truncamiento
Dado el problema a valor inicial
𝑑𝑦
𝑦′ = = 𝑓(𝑥, 𝑦)
{ 𝑑𝑥
𝑦(𝑥0 ) = 𝑦0
𝑑𝑦
= 𝑓(𝑥, 𝑦); 𝑦(𝑥0 ) = 𝑦0
𝑑𝑥
Método de Euler:
𝑑𝑦
−2𝑥 3 + 12𝑥 2 − 20𝑥 + 8.5 ; 𝑦(0) = 1
=⏟
𝑑𝑥 𝑓(𝑥,𝑦)
La solución exacta es
ℎ = 0.5; 𝑥0 = 0; 𝑦0 = 1
𝑦1 = 𝑦0 + ℎ𝑓(𝑥0 , 𝑦0 ) = 1 + 0.5𝑓(0,1) = 5.2500
𝑥1 = 𝑥0 + ℎ = 0 + 0.5 = 0.5
𝑦2 = 𝑦1 + ℎ𝑓(𝑥1 , 𝑦1 ) = 5.25 + 0.5𝑓(0.5,5.25) = 5.875
Algoritmo 1 del método de Euler
Implementación del algoritmo 1 de Euler en lenguaje Python con datos del ejemplo siguiente
#euler.py
#Algoritmo 1 del método de Euler
#Datos
#Defina la función f(x,y) de y'=f(x,y) y las condiciones dentro del programa:
def f(x,y):
return (1-y**3)/(x*y**2)
x0 = 1
y0 = 2
h = 0.1
n=3
X = [] #lista de abscisas
Y = [] #lista de ordenadas
X.append(x0)
Y.append(y0)
%Método de Euler
%Datos: una función f(x,y) continua con fy también continua
% sobre un rectángulo R, un punto (x0,y0 ) en el interior
% de R, y el número de iteraciones adicionales n, y el
% tamaño de paso h
%
syms x y y(x)
disp("Problema a valor inicial y' = f(x,y); y(x0) = y0")
disp('Ingrese los datos:')
f = input('f(x,y) = ');
x0 = input('x0 = ');
y0 = input('y0 = ');
h = input('h = ');
n = input('iter = ');
%Solucion verdadera
yt(x) = dsolve(diff(y) == f, y(x0) == y0);
Yt = yt(X);
%Graficas
close all
plot(X,Y,'r') %euler
hold on
XX = X(1):0.01:X(n+1);
plot(XX,yt(XX),'b') %grafica curva exacta
grid on
legend('Euler', 'Exacta')
%Mostrar resultados
fprintf('Solucion verdadera y(x) = %s \n', char(simplify(yt)))
disp('X(i) = ')
fprintf('%.7f\n', X)
disp('Solucion verdadera, Y(X) = ')
fprintf('%.7f\n', Yt)
disp('Solucion aproximada, Yeuler(X) =')
fprintf('%.7f\n', Y)
disp('Error relativo verdadero procentual, et =')
fprintf('%.7f\n',et)
1
Ejemplo. Resolver el P.V.I. 𝑥𝑦 ′ + 𝑦 = ; 𝑦(1) = 2
𝑦2
(a) Con el método analítico
(b) Con el método de Euler, ℎ = 0.1, 3 iteraciones adicionales, calcular los errores relativos porcentuales
Solución
1
(a) 𝑥𝑦 ′ + 𝑦 = 2 ; 𝑦(1) = 2
𝑦
1
(b) 𝑥𝑦 ′ + 𝑦 = ; 𝑦(1) = 2
𝑦2
1 1 − 𝑦3 1 − 𝑦3
𝑥𝑦 ′ = − 𝑦 = → 𝑦 ′
= = 𝑓(𝑥, 𝑦)
𝑦2 𝑦2 𝑥𝑦 2
1 − 𝑦3
𝑦 ′ = 𝑓(𝑥, 𝑦), 𝑓(𝑥, 𝑦) =
𝑥𝑦 2
Método de Euler:
ℎ = 0.1
𝑥𝑖+1 = 𝑥𝑖 + ℎ; 𝑦(𝑥𝑖+1 ) ≈ 𝑦𝑖+1 = 𝑦𝑖 + 𝑓(𝑥𝑖 , 𝑦𝑖 )ℎ
𝑥0 = 1, 𝑦0 = 2
𝑖 = 0: 𝑥1 = 𝑥0 + ℎ = 1 + 0.1 = 1.1;
Método de Heun:
Resumen:
0
Predictor: 𝑦𝑖+1 = 𝑦𝑖 + ℎ𝑓(𝑥𝑖 , 𝑦𝑖 )
ℎ 0
Corrector: 𝑦𝑖+1 = 𝑦𝑖 + [𝑓(𝑥𝑖 , 𝑦𝑖 ) + 𝑓(𝑥𝑖+1 , 𝑦𝑖+1 )]
2
%Método de Heun
%Datos: una función f(x,y) continua con fy también continua
% sobre un rectángulo R, un punto (x0,y0 ) en el interior
% de R, y el número de iteraciones adicionales n, y el
% tamaño de paso h
%
syms x y y(x)
f = input('f(x,y) = ');
x0 = input('x0 = ');
y0 = input('y0 = ');
h = input('h = ');
n = input('n = ');
X = zeros(n+1,1);
Y = zeros(n+1,1);
X(1) = x0;
Y(1) = y0;
hm = h /2;
for i = 1 : n
X(i+1) = X(i) + h;
yi0 = Y(i) + h * double(subs(f,{x,y},{X(i),Y(i)})); %predictor
Y(i+1) = Y(i) + hm * (double(subs(f,{x,y},{X(i),Y(i)})) + double(subs(f,{x,y},{X(i+1),yi0}))); %corrector
end
%Solucion verdadera
yt(x) = dsolve(diff(y) == f, y(x0) == y0);
Yt = double(yt(X));
%Graficas
close all
plot(X,Y,'r') %Heun
hold on
XX = X(1):0.01:X(n+1);
plot(XX, double(yt(XX)),'b') %grafica curva exacta
legend('Heun', 'Verdadera')
grid on
%Mostrar resultados
fprintf('Solucion verdadera y(x) = %s \n', char(simplify(yt)))
disp('X(i) = ')
fprintf('%.7f\n', X)
disp('Solucion verdadera, Y(X) = ')
fprintf('%.7f\n', Yt)
disp('Solucion aproximada, Yheun(X) =')
fprintf('%.7f\n', Y)
disp('Error relativo verdadero procentual, et =')
fprintf('%.7f\n',et)
Implementación del algoritmo 1 de Heun en lenguaje Python con datos del ejemplo siguiente
#Datos
#Defina la función f(x,y) de y'=f(x,y) y las condiciones dentro del programa:
def f(x,y):
return ((2*y+3)/(4*x+5))**2
x0 = 1
y0 = 2
h = 0.2
n=3
X = [] #lista de abscisas
Y = [] #lista de ordenadas
X.append(x0)
Y.append(y0)
hm = h / 2;
Implementación del algoritmo 1 de Heun en lenguaje Java con datos del ejemplo siguiente
public class Edos {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Algoritmo 1 del método de Heun
//Datos
double x0 = 1;
double y0 = 2;
double h = 0.2;
int n = 3;
Solución. (a)
2𝑦+3 2
(b) 𝑦′ = ( ) ; 𝑦(1) = 2
4𝑥+5
Heun ℎ = 0.2, 3 iteraciones
𝑥𝑖+1 = 𝑥𝑖 + ℎ
0
Predictor: 𝑦𝑖+1 = 𝑦𝑖 + ℎ𝑓(𝑥𝑖 , 𝑦𝑖 )
ℎ 0
Corrector: 𝑦𝑖+1 = 𝑦𝑖 + [𝑓(𝑥𝑖 , 𝑦𝑖 ) + 𝑓(𝑥𝑖+1 , 𝑦𝑖+1 )]
2
𝑥0 = 1, 𝑦0 = 2
Iteración 1: 𝒊 = 𝟎:
𝑥1 = 𝑥0 + ℎ = 1 + 0.2 = 1.2
Predictor: 𝑦10 = 𝑦0 + ℎ𝑓(𝑥0, 𝑦0 ) = 2 + 0.2𝑓(1, 2) = 2.1210
ℎ
Corrector: 𝑦1 = 𝑦0 + [𝑓(𝑥0 , 𝑦0 ) + 𝑓(𝑥1 , 𝑦10 )]
2
0.2
𝑦1 = 2 + [𝑓(1, 2) + 𝑓(1.2, 2.1210)] = 2.1151
2
Iteración 2: 𝒊 = 𝟏
𝑥2 = 𝑥1 + ℎ = 1.2 + 0.2 = 1.4
Predictor: 𝑦20 = 𝑦1 + ℎ𝑓(𝑥1, 𝑦1 ) = 2.1151 + 0.2𝑓(1.2, 2.1151)
𝑦20 = 2.2240
ℎ
Corrector: 𝑦2 = 𝑦1 + [𝑓(𝑥1 , 𝑦1 ) + 𝑓(𝑥2 , 𝑦20 )]
2
0.2
𝑦2 = 2.1151 + [𝑓(1.2, 2.1151) + 𝑓(1.4, 2.2240)]
2
𝑦2 = 2.2189
Iteración 3: 𝒊 = 𝟐
𝑥3 = 𝑥2 + ℎ = 1.4 + 0.2 = 1.6
𝑥𝑖 𝑦𝑖 Heun 𝑦𝑡 𝑖 verdadera 𝑒𝑡 %
93𝑥 + 69 𝑦𝑡 − 𝑦
𝑦𝑡 (𝑥) = ∗ 100%
59 + 22𝑥 𝑦𝑡
1 2 𝑦𝑡(1) = 2 0%
1.2 2.1151 𝑦𝑡(1.2) = 2.1148 2.1148 − 2.1151
∗ 100% = −0.0142%
2.1148
1.4 2.2189 𝑦𝑡(1.4) = 2.2183 −0.0289%
1.6 2.3130 𝑦𝑡(1.6) = 2.312 −0.0384%
5.4.2 Método de Runge Kutta de cuarto orden
ℎ
𝑦𝑖+1 = 𝑦𝑖 + (𝑘1 + 2(𝑘2 + 𝑘3 ) + 𝑘4 )
6
#include <iostream>
#include <math.h>
//Función dato
double f(double x,double y){
return pow((2*y+3)/(4*x+5),2);
}
int main()
{
// Algoritmo 1 del método de Runge Kutta de cuarto orden
// Datos:
double x0 = 1;
double y0 = 2;
double h = 0.2;
int n = 3;
}
Implementación del algoritmo 1 de Runge Kutta de cuarto orden en Matlab
%Solucion verdadera
yt(x) = dsolve(diff(y) == f, y(x0) == y0);
Yt = double(yt(X));
%Graficas
close all
plot(X,Y,'r')
hold on
XX = X(1):0.01:X(n+1);
plot(XX,double(yt(XX)),'b')
legend('Runge Kutta 4', 'Verdadera')
grid on
%Mostrar resultados
fprintf('Solucion verdadera y(x) = %s \n', char(simplify(yt)))
disp('X(i) = ')
fprintf('%.7f\n', X)
disp('Solucion verdadera, Y(X) = ')
fprintf('%.7f\n', Yt)
disp('Solucion aproximada, Yrk4(X) =')
fprintf('%.7f\n', Y)
disp('Error relativo verdadero procentual, et =')
fprintf('%.7f\n',et)
Implementación del algoritmo 1 de Runge Kutta de cuarto orden en lenguaje Haskell para el ejemplo siguiente
rk4 x0 y0 h (-1) = []
rk4 x0 y0 h n = (x0,y0):(rk4 x1 y1 h (n-1))
where
hm = h / 2
hs = h / 6
x1 = x0 + h
k1 = f(x0,y0)
k2 = f(x0+hm,y0+hm*k1)
k3 = f(x0+hm,y0+hm*k2)
k4 = f(x1,y0+h*k3)
y1 = y0 + hs*(k1+2*(k2+k3)+k4)
f(x,y) = ((2*y+3)/(4*x+5))**2
2𝑦+3 2
Ejemplo. Resolver 𝑦 ′ = ( ) = 𝑓(𝑥, 𝑦); 𝑦(1) = 2
4𝑥+5
(a) Con el método analítico
(b) Con el método de Runge-Kutta de cuarto orden, ℎ = 0.2, 2 iteraciones, calcular los errores relativos porcentuales
Solución
𝑑𝑦 2𝑦+3 2 𝑑𝑦 93𝑥+69
(a) =( ) → = (2𝑦 + 3)2 → 𝑦 = (resuelto más arriba)
𝑑𝑥 4𝑥+5 𝑑𝑥 59+22𝑥
(b) 𝑥𝑖+1 = 𝑥𝑖 + ℎ
𝑘1 = 𝑓(𝑥𝑖 , 𝑦𝑖 )
ℎ ℎ
𝑘2 = 𝑓 (𝑥𝑖 + , 𝑦𝑖 + 𝑘1 )
2 2
ℎ ℎ
𝑘3 = 𝑓 (𝑥𝑖 + , 𝑦𝑖 + 𝑘2 )
2 2
𝑘4 = 𝑓(𝑥𝑖+1 , 𝑦𝑖 + ℎ 𝑘3 )
ℎ
𝑦𝑖+1 = 𝑦𝑖 + (𝑘1 + 2(𝑘2 + 𝑘3 ) + 𝑘4 )
6
Primera iteración:
(𝑥0 , 𝑦0 ) = (1,2)
𝑖 = 0:
𝑥1 = 𝑥0 + ℎ = 1 + 0.2 = 1.2
ℎ ℎ 0.2 0.2
𝑘3 = 𝑓 (𝑥0 + , 𝑦0 + 𝑘2 ) = 𝑓 (1 + ,2+ ⋅ 0.5739) = 0.5729
2 2 2 2
0.2
𝑦1 = 2 + (0.6049 + 2(0.5739 + 0.5729) + 0.5442)
6
𝑦1 = 2.1148 ≈ 𝑦(1.2)
Segunda iteración: 𝒊 = 𝟏
(𝑥1 , 𝑦1 ) = (1.2,2.1148)
ℎ ℎ 0.2 0.2
𝑘3 = 𝑓 (𝑥1 + , 𝑦1 + 𝑘2 ) = 𝑓 (1.2 + , 2.1148 + ⋅ 0.5176) = 0.5169
2 2 2 2
0.2
𝑦2 = 2.1148 + (0.5442 + 2(0.5176 + 0.5169) + 0.4921)
6
𝑦2 = 2.2183 ≈ 𝑦(1.4)
Resumen
𝑥𝑖 𝑦𝑖 93𝑥𝑖 + 69 𝑒𝑡 %
𝑦(𝑥𝑖 ) =
59 + 22𝑥𝑖
1 2 𝑦(1) = 2 0%
1.2 2.1148 𝑦(1.2) = 2.1148 0%
1.4 2.2183 𝑦(1.4) = 2.2183 0%
5.4 Métodos de Runge Kutta
Dado el problema a valor inicial
𝑑𝑦
𝑦′ = = 𝑓(𝑥, 𝑦)
{ 𝑑𝑥
𝑦(𝑥0 ) = 𝑦0
Un método de Runge-Kutta a 𝑠 pisos está dado por La idea es conseguir las pendientes aproximadas de la
curva en algunos puntos del intervalo [𝑥𝑖 , 𝑥𝑖+1 ]
𝑘1 = 𝑓(𝑥𝑖 , 𝑦𝑖 )
𝑘2 = 𝑓(𝑥𝑖 + 𝑐2 ℎ, 𝑦𝑖 + ℎ𝑎21 𝑘1 )
𝑘3 = 𝑓(𝑥𝑖 + 𝑐3 ℎ, 𝑦𝑖 + ℎ(𝑎31 𝑘1 + 𝑎32 𝑘2 ))
⋮
𝑘𝑠 = 𝑓 (𝑥𝑖 + 𝑐𝑠 ℎ, 𝑦𝑖 + ℎ(𝑎𝑠1 𝑘1 + ⋯ + 𝑎𝑠,𝑠−1 𝑘𝑠−1 ))
𝑦𝑖+1 = 𝑦𝑖 + ℎ(𝑏1 𝑘1 + ⋯ + 𝑏𝑠 𝑘𝑠 )
𝑐1 = 0
𝑐2 𝑎21
𝑐3 𝑎31 𝑎32
⋮ ⋮ ⋮ ⋱
𝑐𝑠 𝑎𝑠1 𝑎𝑠2 ⋯ 𝑎𝑠,𝑠−1
𝑏1 𝑏2 ⋯ 𝑏𝑠−1 𝑏𝑠
𝑐1 = 0
𝑏1
𝑐1 = 0
𝑐2 𝑐2
𝑏1 𝑏2
El método de Runge-Kutta consiste en:
𝑘1 = 𝑓(𝑦0 )
𝑘2 = 𝑓(𝑦0 + ℎ𝑐2 𝑘1 ) = 𝑓(𝑦0 ) + ℎ𝑐2 𝑓(𝑦0 )𝑓𝑦 (𝑦0 ) + 𝑂(ℎ2 )
𝑦1 = 𝑦0 + ℎ(𝑏1 𝑘1 + 𝑏2 𝑘2 ) = 𝑦0 + ℎ𝑏1 𝑓(𝑦0 ) + ℎ𝑏2 (𝑓(𝑦0 ) + ℎ𝑐2 𝑓(𝑦0 )𝑓𝑦 (𝑦0 )) + 𝑂(ℎ3 )
𝑦1 = 𝑦0 + ℎ𝑏1 𝑓(𝑦0 ) + ℎ𝑏2 𝑓(𝑦0 ) + ℎ2 𝑏2 𝑐2 𝑓(𝑦0 )𝑓𝑦 (𝑦0 ) + 𝑂(ℎ3 )
Por otro lado usando la expansión en serie de Taylor se tiene:
𝑦′′(𝑥0 ) 2
𝑦(𝑥0 + ℎ) = 𝑦(𝑥0 ) + ℎ𝑦 ′ (𝑥0 ) + ℎ + 𝑂(ℎ3 )
2
𝑓𝑦 (𝑦0 )𝑓(𝑦0 ) 2
𝑦(𝑥0 + ℎ) = {𝑦0 + ℎ𝑓(𝑦0 ) + ℎ } + 𝑂(ℎ3 )
2
0
𝑡 𝑡
1 1
1−
2𝑡 2𝑡
Por ejemplo, si 𝑡 = 1:
0
1 1
1 1
2 2
Al aplicar el método al problema 𝑦 ′ = 𝑓(𝑥, 𝑦), 𝑦(𝑥0 ) = 𝑦0 :
𝑘1 = 𝑓(𝑥0 , 𝑦0 )
𝑘2 = 𝑓(𝑥0 + 1ℎ, 𝑦0 + 1ℎ𝑘1 )
1 1 𝑓(𝑥0 , 𝑦0 ) + 𝑓(𝑥0 + 1ℎ, 𝑦0 + 1ℎ𝑓(𝑥0 , 𝑦0 ))
𝑦1 = 𝑦0 + ℎ ( 𝑘1 + 𝑘2 ) = 𝑦0 + ℎ
2 2 2
Visto de otra forma es
𝑓(𝑥 ,𝑦 )+𝑓(𝑥 ,𝑦 0 )
𝑦1 = 𝑦0 + ℎ 0 0 1 1
siendo 𝑦10 = 𝑦0 + ℎ𝑓(𝑥0 , 𝑦0 )
2
Es decir se trata del método de Heun
Deducción del método de Runge Kutta de orden 3:
Considere el problema autónomo 𝑦 ′ = 𝑓(𝑦), 𝑦(𝑥0 ) = 𝑦0
Intentemos con el método de 3 pisos:
𝑐1 = 0
𝑐2 𝑐2
𝑐3 𝑎31 𝑐3 − 𝑎31
𝑏1 𝑏2 𝑏3
El método de Runge-Kutta consiste en:
(Para simplificar en las funciones que tengan por argumento 𝑦0 se omitirá este)
𝑘1 = 𝑓
1
𝑘2 = 𝑓(𝑦0 + ℎ𝑐2 𝑘1 ) = 𝑓 + ℎ𝑐2 𝑓𝑓𝑦 + [𝑓𝑦𝑦 ℎ2 𝑐22 𝑓 2 ] + 𝑂(ℎ3 )
2
𝑘3 = 𝑓(𝑦0 + ℎ(𝑎31 𝑘1 + (𝑐3 − 𝑎31 )𝑘2 ))
1
= 𝑓 (𝑦0 + ℎ (𝑐3 𝑓 + (𝑐3 − 𝑎31 ) (ℎ𝑐2 𝑓𝑓𝑦 + [𝑓𝑦𝑦 ℎ2 𝑐22 𝑓 2 ] + 𝑂(ℎ3 ))))
2
1
= 𝑓 (𝑦0 + 𝑐3 𝑓ℎ + ℎ2 (𝑐3 − 𝑎31 )𝑐2 𝑓𝑓𝑦 + (𝑐3 − 𝑎31 )ℎ3 𝑐22 𝑓𝑦𝑦 𝑓 2 + 𝑂(ℎ4 ))
2
1
= 𝑓 + (𝑐3 𝑓ℎ + ℎ2 (𝑐3 − 𝑎31 )𝑐2 𝑓𝑓𝑦 + (𝑐3 − 𝑎31 )ℎ3 𝑐22 𝑓𝑦𝑦 𝑓 2 + 𝑂(ℎ4 )) 𝑓𝑦
2
2
1 1
+ (𝑐3 𝑓ℎ + ℎ 3 − 𝑎31 )𝑐2 𝑓𝑓𝑦 + (𝑐3 − 𝑎31 )ℎ 𝑐2 𝑓𝑦𝑦 𝑓 + 𝑂(ℎ )) 𝑓𝑦𝑦 + 𝑂(ℎ3 )
2 (𝑐 3 2 2 4
2 2
𝑦1 = 𝑦0 + ℎ(𝑏1 𝑘1 + 𝑏2 𝑘2 + 𝑏3 𝑘3 )
1
= 𝑦0 + ℎ𝑏1 𝑓 + ℎ𝑏2 (𝑓 + ℎ𝑐2 𝑓𝑓𝑦 + [𝑓𝑦𝑦 ℎ2 𝑐22 𝑓 2 ]) + 𝑂(ℎ4 ) +
2
1
+ℎ𝑏3 (𝑓 + (𝑐3 𝑓ℎ + ℎ2 (𝑐3 − 𝑎31 )𝑐2 𝑓𝑓𝑦 + (𝑐3 − 𝑎31 )ℎ3 𝑐22 𝑓𝑦𝑦 𝑓 2 + 𝑂(ℎ4 )) 𝑓𝑦
2
2
1 1
+ (𝑐3 𝑓ℎ + ℎ2 (𝑐3 − 𝑎31 )𝑐2 𝑓𝑓𝑦 + (𝑐3 − 𝑎31 )ℎ3 𝑐22 𝑓𝑦𝑦 𝑓 2 + 𝑂(ℎ4 )) 𝑓𝑦𝑦 ) + 𝑂(ℎ4 )
2 2
1 1
= 𝑦0 + ℎ𝑏1 𝑓 + ℎ𝑏2 𝑓 + ℎ2 𝑏2 𝑐2 𝑓𝑓𝑦 + ℎ3 𝑏2 𝑐22 𝑓 2 𝑓𝑦𝑦 + ℎ𝑏3 𝑓 + ℎ2 𝑏3 𝑐3 𝑓𝑓𝑦 + ℎ3 𝑏3 (𝑐3 − 𝑎31 )𝑐2 𝑓𝑓𝑦2 + ℎ3 𝑏3 𝑐32 𝑓 2 𝑓𝑦𝑦 + 𝑂(ℎ4 )
2 2
𝑓𝑦 𝑓 2 𝑓𝑦𝑦 𝑓 2 + 𝑓𝑦 𝑓𝑦 𝑓 3
𝑦(𝑥0 + ℎ) = {𝑦0 + ℎ𝑓 + ℎ + ℎ } + 𝑂(ℎ4 )
2 6
O bien:
𝑐1 = 0
2 2
3 3
2 2 1 1
−
3 3 4𝑢 4𝑢
1 3 𝑢
−𝑢
4 4
1
Ejemplo. Resolver el P.V.I. 𝑥𝑦 ′ + 𝑦 = ; 𝑦(1) = 2
𝑦2
Con el método de Runge-Kutta de cuarto orden, ℎ = 0.2, 2 iteraciones, calcular los errores relativos porcentuales
3
√𝑥 3 +7
Solución exacta es 𝑦(𝑥) = .
𝑥