Está en la página 1de 14

Solución del Pacial Unidad 5

December 19, 2022

1 Parcial Unidad 5
1.0.1 Clasificar las siguientes ecuaciones diferenciales

Ecuación Variables Variables


diferencial Tipo dependientes independientes Orden Grado ¿Es lineal?
Ordinaria y t 2 No tiene No
√ grado
𝑡𝑦″ +𝑡2 𝑦′ −(sin(𝑡)) 𝑦 = 𝑡2 −𝑡+1

Ordinaria t s 2 1 No
d2 𝑡 d𝑡
𝑠2 2
+𝑠𝑡 =𝑠
d𝑠 d𝑠

Ordinaria y x 3 1 Si

𝑦‴ −5𝑥𝑦′ = 𝑒𝑥 +1

Ordinaria y x 3 No tiene No
grado
𝑥𝑦‴ +𝑥2 𝑦″ −𝑥𝑦′ +sin(𝑦) = 0

1.0.2 Obtener la solución general de las siguientes ecuaciones diferenciales


Resolver la ecuación diferencial

𝑥𝑑𝑦 + (𝑥𝑦 + 𝑦 − 𝑥2 − 2𝑥) 𝑑𝑥 = 0

Solución
Reescribiendo la ecuación diferencial
d𝑦
𝑥 + (𝑥 + 1) 𝑦 = 𝑥2 + 2𝑥
d𝑥

1
Normalizando la ecuación diferencial
d𝑦 𝑥 + 1
+ 𝑦 =𝑥+2
d𝑥 𝑥
Se observa que se trata una ecuación diferencial lineal de primer orden, donde
𝑥+1 1
𝑝(𝑥) = = 1 + ; 𝑓(𝑥) = 𝑥 + 2
𝑥 𝑥
por lo que el factor integrante es
1
𝜇 (𝑥) = 𝑒∫(1+ 𝑥 )𝑑𝑥 = 𝑒𝑥+𝐿𝑛𝑥 = 𝑒𝑥 𝑒𝐿𝑛𝑥 = 𝑥𝑒𝑥
Permitiendo resolver la siguiente relación

(𝜇𝑦) = 𝜇𝑓 = 𝑥𝑒𝑥 (𝑥 + 2) ∫ 𝑑 (𝜇𝑦) = ∫ 𝑥2 𝑒𝑥 𝑑𝑥 + 2 ∫ 𝑥𝑒𝑥 𝑑𝑥

y resolviendo la primer integral del lado derecho de la igualdad, donde

𝑢 = 𝑥2 ; 𝑑𝑢 = 2𝑥𝑑𝑥 y 𝑑𝑣 = 𝑒𝑥 ; 𝑣 = 𝑒𝑥 𝜇𝑦 = 𝑥2 𝑒𝑥 − 2 ∫ 𝑒𝑥 𝑥𝑑𝑥 + 2 ∫ 𝑒𝑥 𝑥𝑑𝑥 + 𝐶

despejando a la variable dependiente 𝑦, se obtiene la solución general de la ecuación diferencial


𝐶
𝑦𝑔 = 𝑥 +
𝑥𝑒𝑥
Resolver la ecuación diferencial
𝑦 𝑥
𝑦′ = +
𝑥 𝑦
Solución
Sumando los términos de lado derecho de la igualdad
d𝑦 𝑦 2 + 𝑥2
=
d𝑥 𝑥𝑦
y reescribiendo la ecuación diferencial
𝑥𝑦𝑑𝑦 = (𝑦2 + 𝑥2 ) 𝑑𝑥 (𝑦2 + 𝑥2 ) 𝑑𝑥 − 𝑥𝑦𝑑𝑦 = 0
y analizando la expresión anterior, se observa claramente que se trata de una ecuación diferencial
homogénea con grado de homogeneidad 2, por lo que haciendo el cambio de variable 𝑦 = 𝑢𝑥, donde
𝑑𝑦 = 𝑢𝑑𝑥 + 𝑥𝑑𝑢, la ecuación diferencial que se obtiene es
(𝑢2 𝑥2 + 𝑥2 ) 𝑑𝑥 − 𝑥𝑢𝑥 (𝑢𝑑𝑥 + 𝑥𝑑𝑢) = 0𝑢2 𝑥2 𝑑𝑥 + 𝑥2 𝑑𝑥 − 𝑥2 𝑢2 𝑑𝑥 − 𝑥3 𝑢𝑑𝑢 = 0
y eliminando términos semejantes, se llega a la siguiente ecuación de variables separables
𝑥2 𝑑𝑥 = 𝑥3 𝑢𝑑𝑢
Resolviendo la ecuación diferencial
𝑑𝑥 𝑢2
∫ = ∫ 𝑢𝑑𝑢𝐿𝑛𝑥 = +𝐶
𝑥 2
donde 𝑢 = 𝑦/𝑥 debido al cambio de variable propuesto
𝑦2
𝑒𝐿𝑛𝑥 = 𝑒 2𝑥2 +𝐶
y aplicando la exponencial a cada lado de la igualdad, se llega a la solución general de la ecuación
diferencial
𝑦2
𝑥𝑔 = 𝐶𝑒 2𝑥2

2
1.0.3 Resolver la ecuación diferenciaal mediante el polinomio de Taylor
Resolver la ecuación diferencial
1
𝑦′ =
(5 + 𝑥) 𝑦
4
con la condición incial 𝑦(0) = 2, aproximándola a través de un polinomio de Taylor de quinto grado
Solución
La solución de esta ecuación diferencial es 𝑦(𝑥), misma que puede ser representada por la expresión

𝑦″ (𝑥0 ) ‴
2 𝑦 (𝑥0 ) 3 𝑦(𝑛) (𝑥0 ) 𝑛
𝑦(𝑥) = 𝑃𝑛 = 𝑦 (𝑥0 )+𝑦′ (𝑥0 ) (𝑥 − 𝑥0 )+ (𝑥 − 𝑥0 ) + (𝑥 − 𝑥0 ) +⋯+ (𝑥 − 𝑥0 ) .
2! 3! 𝑛!

Con las condiciones iniciales, tenemos el primer término del Polinomio de Taylor,

𝑥0 = 0; 𝑦 (𝑥0 ) = 2.

Posteriormente, de la ecuación diferencial podemos encontrar a 𝑦′ (𝑥0 ) del segundo término del
Polinomio de Taylor

1 1
𝑦′ (𝑥0 ) = (5 + 𝑥0 ) 𝑦0 = (5 + 0) (2) = 2.5
4 4

Para poder determinar a 𝑦″ (𝑥0 ) es necesario considerar que 𝑦′ = 41 (5 + 𝑥) 𝑦, por lo que derivando
a 𝑦′ y evaluando en 𝑥0 , se encuentra a 𝑦″ (𝑥0 ) del tercer término del Polinomio de Taylor,

d ′ d 1
𝑦″ (𝑥0 ) = (𝑦 ) ∣ = [ (5 + 𝑥) 𝑦(𝑥)] ∣
d𝑥 𝑥=𝑥
d𝑥 4 𝑥=𝑥
0 0

1 1 1 1
= [ (5 + 𝑥) 𝑦′ (𝑥) + 𝑦(𝑥)] ∣ = (5 + 𝑥0 ) 𝑦′ (𝑥0 ) + 𝑦(𝑥0 )
4 4 𝑥=𝑥
4 4
0

1 1
= (5 + 0) (2.5) + (2) = 3.625
4 4

Se hace el mismo procedimiento del paso anterior para obtener a 𝑦‴ (𝑥0 ),

d ″ d 1 1
𝑦‴ (𝑥0 ) = (𝑦 ) ∣ = [ (5 + 𝑥) 𝑦′ (𝑥) + 𝑦(𝑥)] ∣
d𝑥 𝑥=𝑥
d𝑥 4 4 𝑥=𝑥
0 0

1 1
= [ (5 + 𝑥) 𝑦″ (𝑥) + 𝑦′ (𝑥)] ∣
4 2 𝑥=𝑥 0

1 1 1 1
= (5 + 𝑥0 ) 𝑦″ (𝑥0 ) + 𝑦′ (𝑥0 ) = (5 + 0) (3.625) + (2.5)
4 2 4 2
= 5.78125

3
Continuando con este procedimiento, la aproximación de la ecuación diferencial mediante un poli-
nomio de Taylor de quinto grado, se tiene

𝑦(𝑥) ≈ 𝑃5 (𝑥) = 2 + 2.5𝑥 + 1.813𝑥2 + 0.964𝑥3 + 0.414𝑥4 + 0.152𝑥5

[36]: import numpy as np


import math
import matplotlib.pyplot as plt

def P_T(x):
return 2+2.5*x+1.813*x**2+0.964*x**3+0.414*x**4+0.152*x**5 #polinomio de␣
↪Taylor de 5to grado

def sol(x):
return 2*math.exp(0.25*(5*x+0.5*x**2)) #solución analítica de la ecuación␣
↪diferencial

n=5 #aquí se puede jugar con el número de puntos a evaluar


h=(1/(n-1))

x=np.zeros(n)
y=np.zeros(n)
ys=np.zeros(n)

x[0]=0
y[0]=2
ys[0]=2

print('{:^12} {:^10} {:^9}'.format(' x ', 'y_aprox', 'y_exact'))


print('{:10.3f} {:10.5f} {:10.5f}'.format(x[0], y[0], ys[0]))
for i in range(1,n):
x[i]=x[i-1]+h
y[i]=P_T(x[i])
ys[i]=sol(x[i])
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[i], y[i], ys[i]))
plt.scatter(x,y, color='black') #puntos en color negro para la solución␣
↪aproximada

plt.plot(x,ys, "red") #línea continua en color rojo para la solución analítica

x y_aprox y_exact
0.000 2.00000 2.00000
0.250 2.75514 2.75512
0.500 3.85438 3.85510
0.750 5.46856 5.47920
1.000 7.84300 7.91015

[36]: [<matplotlib.lines.Line2D at 0x7f08ff585f40>]

4
1.0.4 Método de Euler
Resolver la ecuación diferencial
1
𝑦′ = (5 + 𝑥) 𝑦
4
con la condición incial 𝑦(0) = 2, aproximándola a través del método de Euler en el intervalo de
0 ≤ 𝑥 ≤ 1 con ℎ = 0.25.
𝑦𝑖+1 = 𝑦𝑖 + ℎ𝑓(𝑥𝑖 , 𝑦𝑖 )𝑖 = 0, 1, 2, ...

[37]: import numpy as np


import math
import matplotlib.pyplot as plt

def f(x,y):
return (1/4)*(5+x)*y
def sol(x):
return 2*math.exp(0.25*(5*x+0.5*x**2)) #solución analítica de la ecuación␣
↪diferencial

n=5 #aquí se puede jugar con el número de puntos a evaluar


h=(1/(n-1))

5
x=np.zeros(n)
y=np.zeros(n)
ys=np.zeros(n)

x[0]=0
y[0]=2
ys[0]=2
print('{:^12} {:^10} {:^9}'.format(' x ', 'y_aprox', 'y_exact'))
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[0], y[0], ys[0]))
for i in range(1,n):
x[i]=x[i-1]+h
y[i]=y[i-1]+h*f(x[i-1],y[i-1])
ys[i]=sol(x[i])
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[i], y[i], ys[i]))
plt.scatter(x,y, color='black') #puntos para la solución aproximada
plt.plot(x,ys, "red") #línea continua para la solución analítica

x y_aprox y_exact
0.000 2.00000 2.00000
0.250 2.62500 2.75512
0.500 3.48633 3.85510
0.750 4.68475 5.47920
1.000 6.36834 7.91015

[37]: [<matplotlib.lines.Line2D at 0x7f08ffc11ee0>]

6
1.0.5 Método de Euler modificado
Resolver la ecuación diferencial
1
𝑦′ =
(5 + 𝑥) 𝑦
4
con la condición incial 𝑦(0) = 2, aproximándola a través del método de Euler modificado en el
intervalo de 0 ≤ 𝑥 ≤ 1 con ℎ = 0.25.

𝑦𝑖+1𝑝 = 𝑦𝑖 + ℎ𝑓(𝑥𝑖 , 𝑦𝑖 )𝑦𝑖+1𝑐 = 𝑦𝑖 + [𝑓 (𝑥𝑖 , 𝑦𝑖 ) + 𝑓 (𝑥𝑖+1 , 𝑦𝑖+1𝑝 )] 𝑖 = 0, 1, 2, ...
2

[38]: import numpy as np


import math
import matplotlib.pyplot as plt

def f(x,y):
return (1/4)*(5+x)*y
def sol(x):
return 2*math.exp(0.25*(5*x+0.5*x**2)) #solución analítica de la ecuación␣
↪diferencial

n=5 #aquí se puede jugar con el número de puntos a evaluar


h=(1/(n-1))

x=np.zeros(n)
yp=np.zeros(n)
yc=np.zeros(n)
ys=np.zeros(n)

x[0]=0
yc[0]=2
ys[0]=2
print('{:^12} {:^10} {:^9}'.format(' x ', 'y_aprox', 'y_exact'))
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[0], yc[0], ys[0]))
for i in range(1,n):
x[i]=x[i-1]+h
yp[i]=yc[i-1]+h*f(x[i-1],yc[i-1])
yc[i]=yc[i-1]+(h/2)*(f(x[i-1],yc[i-1])+f(x[i],yp[i]))
ys[i]=sol(x[i])
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[i], yc[i], ys[i]))
plt.scatter(x,yc, color='black') #puntos para la solución aproximada
plt.plot(x,ys, "red") #línea continua para la solución analítica

x y_aprox y_exact
0.000 2.00000 2.00000

7
0.250 2.74316 2.75512
0.500 3.81940 3.85510
0.750 5.39807 5.47920
1.000 7.74392 7.91015

[38]: [<matplotlib.lines.Line2D at 0x7f08ff59b3d0>]

1.0.6 Método de Runge-Kutta de 2do orden


Resolver la ecuación diferencial
1
𝑦′ =(5 + 𝑥) 𝑦
4
con la condición incial 𝑦(0) = 2, aproximándola a través del método de Runge-Kutta de segundo
orden en el intervalo de 0 ≤ 𝑥 ≤ 1 con ℎ = 0.25.
1
𝑦𝑖+1 = 𝑦𝑖 + (𝑘 + 𝑘2 ) donde𝑘1 = ℎ𝑓 (𝑥𝑖 , 𝑦𝑖 ) 𝑘2 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑦𝑖 + 𝑘1 )
2 1

[39]: import numpy as np


import math
import matplotlib.pyplot as plt

def f(x,y):

8
return (1/4)*(5+x)*y
def sol(x):
return 2*math.exp(0.25*(5*x+0.5*x**2)) #solución analítica de la ecuación␣
↪diferencial

n=5 #aquí se puede jugar con el número de puntos a evaluar


h=(1/(n-1))

x=np.zeros(n)
k1=np.zeros(n)
k2=np.zeros(n)
y=np.zeros(n)
ys=np.zeros(n)

x[0]=0
y[0]=2
ys[0]=2
print('{:^12} {:^10} {:^9}'.format(' x ', 'y_aprox', 'y_exact'))
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[0], y[0], ys[0]))
for i in range(1,n):
x[i]=x[i-1]+h
k1[i]=h*f(x[i-1],y[i-1])
k2[i]=h*f(x[i-1]+h,y[i-1]+k1[i])
y[i]=y[i-1]+(1/2)*(k1[i]+k2[i])
ys[i]=sol(x[i])
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[i], y[i], ys[i]))
plt.scatter(x,y, color='black') #puntos para la solución aproximada
plt.plot(x,ys, "red") #línea continua para la solución analítica

x y_aprox y_exact
0.000 2.00000 2.00000
0.250 2.74316 2.75512
0.500 3.81940 3.85510
0.750 5.39807 5.47920
1.000 7.74392 7.91015

[39]: [<matplotlib.lines.Line2D at 0x7f08ff451430>]

9
1.0.7 Método de Runge-Kutta de 4to orden
Resolver la ecuación diferencial
1
𝑦′ =(5 + 𝑥) 𝑦
4
con la condición incial 𝑦(0) = 2, aproximándola a través del método de Runge-Kutta de cuarto
orden en el intervalo de 0 ≤ 𝑥 ≤ 1 con ℎ = 0.25.
ℎ 𝑘 ℎ 𝑘
𝑘1 = ℎ𝑓 (𝑥𝑖 , 𝑦𝑖 ) 𝑘2 = ℎ𝑓 (𝑥𝑖 + , 𝑦 + 1 ) 𝑘3 = ℎ𝑓 (𝑥𝑖 + , 𝑦𝑖 + 2 ) 𝑘4 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑦𝑖 + 𝑘3 )
2 𝑖 2 2 2

[40]: import numpy as np


import math
import matplotlib.pyplot as plt

def f(x,y):
return (1/4)*(5+x)*y
def sol(x):
return 2*math.exp(0.25*(5*x+0.5*x**2)) #solución analítica de la ecuación␣
↪diferencial

n=5 #aquí se puede jugar con el número de puntos a evaluar


h=(1/(n-1))

10
x=np.zeros(n)
k1=np.zeros(n)
k2=np.zeros(n)
k3=np.zeros(n)
k4=np.zeros(n)
y=np.zeros(n)
ys=np.zeros(n)

x[0]=0
y[0]=2
ys[0]=2
print('{:^12} {:^10} {:^9}'.format(' x ', 'y_aprox', 'y_exact'))
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[0], y[0], ys[0]))
for i in range(1,n):
x[i]=x[i-1]+h
k1[i]=h*f(x[i-1],y[i-1])
k2[i]=h*f(x[i-1]+(h/2),y[i-1]+(k1[i]/2))
k3[i]=h*f(x[i-1]+(h/2),y[i-1]+(k2[i]/2))
k4[i]=h*f(x[i-1]+h,y[i-1]+k3[i])
y[i]=y[i-1]+(1/6)*(k1[i]+2*k2[i]+2*k3[i]+k4[i])
ys[i]=sol(x[i])
print('{:10.3f} {:10.5f} {:10.5f}'.format(x[i], y[i], ys[i]))
plt.scatter(x,y, color='black') #puntos para la solución aproximada
plt.plot(x,ys, "red") #línea continua para la solución analítica

x y_aprox y_exact
0.000 2.00000 2.00000
0.250 2.75506 2.75512
0.500 3.85491 3.85510
0.750 5.47875 5.47920
1.000 7.90917 7.91015

[40]: [<matplotlib.lines.Line2D at 0x7f08ff3d45e0>]

11
1.0.8 Sistemas de ecuaciones diferenciales
Resolver el siguiente sistema de ecuaciones diferenciales

𝑦′ = 4𝑥 − 𝑦 + 1𝑧 ′ = 2𝑧 − 𝑦

utilizando el método de Runge-Kutta de cuarto orden, para las condiciones iniciales: 𝑦(0) = 𝑧(0) =
1, en el intervalo de 0 ≤ 𝑥 ≤ 1 con ℎ = 0.2.
[42]: import numpy as np
import math
import matplotlib.pyplot as plt

def f(x,y,z):
return 4*x-y+1
def g(x,y,z):
return 2*z-y

def soly(x):
return -3+4*x+4*math.exp(-x) #solución analítica de y
def solz(x):
return -(1/2)+2*x+(4/3)*math.exp(-x)+(1/6)*math.exp(2*x) #solución␣
↪analítica de z

12
n=6 #aquí se puede jugar con el número de puntos a evaluar
h=(1/(n-1))

x=np.zeros(n)
k1_y=np.zeros(n)
k2_y=np.zeros(n)
k3_y=np.zeros(n)
k4_y=np.zeros(n)
y=np.zeros(n)
k1_z=np.zeros(n)
k2_z=np.zeros(n)
k3_z=np.zeros(n)
k4_z=np.zeros(n)
z=np.zeros(n)
ys=np.zeros(n)
zs=np.zeros(n)

x[0]=0
y[0]=1
z[0]=1
ys[0]=1
zs[0]=1
print('{:^12} {:^10} {:^10} {:^10} {:^10}'.format(' x ', 'y_aprox', 'y_exact',␣
↪'z_aprox', 'z_exact'))

print('{:10.3f} {:10.5f} {:10.5f} {:10.5f} {:10.5f}'.format(x[0], y[0], ys[0],␣


↪z[0], zs[0]))

for i in range(1,n):
x[i]=x[i-1]+h
k1_y[i]=h*f(x[i-1],y[i-1],z[i-1])
k2_y[i]=h*f(x[i-1]+(h/2),y[i-1]+(k1_y[i]/2),z[i-1]+(k1_y[i]/2))
k3_y[i]=h*f(x[i-1]+(h/2),y[i-1]+(k2_y[i]/2),z[i-1]+(k2_y[i]/2))
k4_y[i]=h*f(x[i-1]+h,y[i-1]+k3_y[i],z[i-1]+k3_y[i])
y[i]=y[i-1]+(1/6)*(k1_y[i]+2*k2_y[i]+2*k3_y[i]+k4_y[i])
k1_z[i]=h*g(x[i-1],y[i-1],z[i-1])
k2_z[i]=h*g(x[i-1]+(h/2),y[i-1]+(k1_z[i]/2),z[i-1]+(k1_z[i]/2))
k3_z[i]=h*g(x[i-1]+(h/2),y[i-1]+(k2_z[i]/2),z[i-1]+(k2_z[i]/2))
k4_z[i]=h*g(x[i-1]+h,y[i-1]+k3_z[i],z[i-1]+k3_z[i])
z[i]=z[i-1]+(1/6)*(k1_z[i]+2*k2_z[i]+2*k3_z[i]+k4_z[i])
ys[i]=soly(x[i])
zs[i]=solz(x[i])
print('{:10.3f} {:10.5f} {:10.5f} {:10.5f} {:10.5f}'.format(x[i], y[i],␣
↪ys[i], z[i], zs[i]))

plt.scatter(x,y, color='black') #puntos para la solución aproximada de y


plt.scatter(x,z, color='red') #puntos para la solución aproximada de z
plt.plot(x,ys, "black") #línea continua para la solución analítica de y

13
plt.plot(x,zs, "red") #línea continua para la solución analítica de z

x y_aprox y_exact z_aprox z_exact


0.000 1.00000 1.00000 1.00000 1.00000
0.200 1.07493 1.07492 1.22140 1.24028
0.400 1.28130 1.28128 1.52425 1.56468
0.600 1.59527 1.59525 1.91550 1.98510
0.800 1.99734 1.99732 2.41049 2.52461
1.000 2.47154 2.47152 3.03565 3.22202

[42]: [<matplotlib.lines.Line2D at 0x7f08ff274df0>]

14

También podría gustarte