<jupyter_start><jupyter_text>------ **PRÁCTICA DIRIGIDA Nº1**   **Ecuaciones Diferenciales I**   **Aplicaciones en Python** --- Propósito: > Dar a conocer el lenguaje Python a los alumnos del curso de Macroeconomía Dinámica como una herramienta adicional a sus habilidades informáticas. Autor:> <NAME>------  **Primero: instalar los siguientes paquetes**---<jupyter_code># PAQUETE PRELIMINARES
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d<jupyter_output><empty_output><jupyter_text>--- Outlines:1.Definir la ecuación diferencial>  1.1 Ecuación2. Definiendo valores>       2.1 Establcer las condiciones iniciales>       2.2 Instantes del tiempo>       2.3 Resolver la ecuación diferencial>       2.4 Mostramos los 6 valores principales3. Gráficos>       3.1 Labels>       3.2 Cuadrícula>       3.3 Tamaño>       3.4 Línea de convergencia>       3.5 Ajuste de ejes>       3.6 Curva>       3.7 Mostrar el gráfico---- **Ejercicio 2.1 a**: Resolver la siguiente ecuación diferencial$\frac{dy}{dt}+4y=-20\qquad y(0)=10$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def model(y,t):
    k = 4
    dydt = -20-k*y
    return dydt

#========================================================================
# PARTE 1: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0 = [10]

### 2.2 Instantes del tiempo
t = np.linspace(0,10,200)

### 2.3 Resolver la ecuación diferencial
y = odeint(model,y0,t)

### 2.4 Mostramos los 6 valores principales
for i in range(0,7):
  print(f'y({t[i]}) = {y[i,0]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Convergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (20, 15)

### 3.4 Línea de convergencia
plt.axhline(y=-5, color='r', linestyle='-')

### 3.6 Ajusate de ejes
plt.ylim(-6,11)
plt.xlim(right=5)

### 3.7 Curva
plt.plot(t,y)

### 3.8 Mostrar el gráfico
plt.show()<jupyter_output>y(0.0) = 10.0
y(0.05025125628140704) = 7.268624861452221
y(0.10050251256281408) = 5.0346104858246195
y(0.15075376884422112) = 3.207391479794029
y(0.20100502512562815) = 1.7128937688720767
y(0.2512562814070352) = 0.49053167051351254
y(0.30150753768844224) = -0.509248460523577<jupyter_text>**Ejercicio 2.1 b**: Resolver la siguiente ecuación diferencial$\frac{dy}{dt}=3y \qquad y(0)=2$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def model1(y,t):
    k = 3
    dydt = k*y
    return dydt

#========================================================================
# PARTE 2: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0 = [2]

### 2.2 Instantes del tiempo
t = np.linspace(0,10,200)

### 2.3 Resolver la ecuación diferencial
y = odeint(model1,y0,t)

### 2.4 Mostramos los 6 valores principales
for i in range(0,7):
  print(f'y({t[i]}) = {y[i,0]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Divergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (15, 10)

### 3.4 Línea de convergencia
plt.axhline(y=2, color='r', linestyle='-')

###3.5 Ajuste de ejes
plt.ylim(top=10)
plt.xlim(right=0.5)

### 3.6 Curva
plt.plot(t,y)

### 3.7 Mostrar el gráfico
plt.show()<jupyter_output>y(0.0) = 2.0
y(0.05025125628140704) = 2.325420632387152
y(0.10050251256281408) = 2.7037906151976085
y(0.15075376884422112) = 3.143725253512361
y(0.20100502512562815) = 3.655241832200581
y(0.2512562814070352) = 4.249987567671555
y(0.30150753768844224) = 4.941504357552237<jupyter_text>**Ejercicio 2.1 c**: Resolver la siguiente ecuación diferencial$\frac{dy}{dt}+3y=6t; \qquad y(0)=\frac{1}{2}$<jupyter_code>#===============================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#===============================================================================
mt = np.array([0,50])

sample_times = np.arange(len(mt))
tfunc = interp1d(sample_times, mt, bounds_error=False, fill_value="extrapolate")

# Test ODE function
def test(y, t):
    dydt = 6*tfunc(t)-3*y
    return dydt

#===============================================================================
# PARTE 2: Definiendo valores
#===============================================================================

### 2.1 Establcer las condiciones iniciales
y0 = [1/3]

### 2.2 Instantes del tiempo
tspan = np.linspace(0,2,200)

### 2.3 Resolver la ecuación diferencial
yt = odeint(test, y0, tspan)

### 2.4 Mostramos los 6 valores principales
for i in range(0,7):
  print(f'y({t[i]}) = {y[i,0]}')

#===============================================================================
# PARTE 3: Graficar resultados
#===============================================================================

### 3.1 Labels
plt.title("Divergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño

### 3.4 Línea de convergencia
plt.axhline(y=1/3, color='r', linestyle='-')

###3.5 Ajuste de ejes
plt.ylim(top=3)
plt.xlim(0,0.2)

### 3.6 Curva
plt.plot(tspan, yt, 'black')

### 3.7 Mostrar el gráfico
plt.show()<jupyter_output>y(0.0) = 2.0
y(0.05025125628140704) = 2.325420632387152
y(0.10050251256281408) = 2.7037906151976085
y(0.15075376884422112) = 3.143725253512361
y(0.20100502512562815) = 3.655241832200581
y(0.2512562814070352) = 4.249987567671555
y(0.30150753768844224) = 4.941504357552237<jupyter_text>**Ejercicio 2.2 a**: Resolver la siguiente ecuación diferencial$y''(t)+y'(t)+\frac{1}{4}y(t)=9;\quad y(0)=30\quad$ y $\quad y'(0)=15$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def f(u,t):
  return (u[1],-u[1]-0.25*u[0]+9)

#========================================================================
# PARTE 2: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0=[30,15]

### 2.2 Instantes del tiempo
ts=np.linspace(0,40,100)

### 2.3 Resolver la ecuación diferencial
us=odeint(f,y0,ts)
ys=us[:,0]

### 2.4 Mostramos los 6 valores principales
for i in range(0,31):
  print(f'y({i}) = {ys[i]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Convergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (10, 5)

### 3.4 Línea de convergencia
plt.axhline(y=36, color='r', linestyle='-')

### 3.5 Curva
plt.plot(ts,ys,'-')
### 3.6 Mostrar el gráfico
plt.show()<jupyter_output>y(0) = 30.0
y(1) = 35.059121649818714
y(2) = 38.468159994888936
y(3) = 40.66150727259939
y(4) = 41.96984805032897
y(5) = 42.643565879077656
y(6) = 42.87105574659203
y(7) = 42.79302426823721
y(8) = 42.51363245561706
y(9) = 42.109157532550306
y(10) = 41.63470887605331
y(11) = 41.12941975098076
y(12) = 40.62044811561847
y(13) = 40.126048325465256
y(14) = 39.65791971568936
y(15) = 39.222993924305094
y(16) = 38.82478765347843
y(17) = 38.464420057785034
y(18) = 38.14137223294552
y(19) = 37.85404899671169
y(20) = 37.60019003790939
y(21) = 37.37716659758958
y(22) = 37.182191912824514
y(23) = 37.01246696506547
y(24) = 36.86527822953127
y(25) = 36.73806003342267
y(26) = 36.628431272872675
y(27) = 36.53421373018931
y(28) = 36.453437529785
y(29) = 36.38433779588138
y(30) = 36.32534556973636<jupyter_text>**Ejercicio 2.2 b**: Resolver la siguiente ecuación diferencial$y''(t)-4y'(t)-5y(t)=35;\quad y(0)=5\quad$ y $\quad y'(0)=6$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def f(u,t):
  return (u[1],4*u[1]+5*u[0]+35)

#========================================================================
# PARTE 2: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0=[5,6]

### 2.2 Instantes del tiempo
ts=np.linspace(0,10,200)

### 2.3 Resolver la ecuación diferencial
us=odeint(f,y0,ts)
ys=us[:,0]

### 2.4 Mostramos los 6 valores principales
for i in range(0,10):
  print(f'y({i}) = {ys[i]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Divergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (10, 5)

### 3.4 Línea de "convergencia"
plt.axhline(y=5, color='r', linestyle='-')

###3.5 Ajuste de ejes
plt.ylim(4,100)
plt.xlim(right=0.75)

### 3.5 Curva
plt.plot(ts,ys,'-')

### 3.6 Mostrar el gráfico
plt.show()<jupyter_output>y(0) = 5.0
y(1) = 5.4158326442668
y(2) = 6.098052544272336
y(3) = 7.1155162084924495
y(4) = 8.557102721533905
y(5) = 10.53741584601707
y(6) = 13.204115366395035
y(7) = 16.74734322868683
y(8) = 21.41184381276948
y(9) = 27.512545674224945<jupyter_text>**Ejercicio 2.2 c**: Resolver la siguiente ecuación diferencial$y''(t)-\frac{1}{2}y'(t)=13;\quad y(0)=17\quad$ y $\quad y'(0)=-19$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def f(u,t):
  return (u[1],0.5*u[1]+0*u[0]+13)

#========================================================================
# PARTE 2: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0=[17,-18.5]

### 2.2 Instantes del tiempo
ts=np.linspace(0,10,200)

### 2.3 Resolver la ecuación diferencial
us=odeint(f,y0,ts)
ys=us[:,0]

### 2.4 Mostramos los 6 valores principales
for i in range(0,10):
  print(f'y({i}) = {ys[i]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Divergencia", fontsize=20)
plt.xlabel('time', fontsize=20)
plt.ylabel('y(t)', fontsize=20)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (10, 5)

### 3.4 Línea de "convergencia"
plt.axhline(y=5, color='r', linestyle='-')

###3.5 Ajuste de ejes
plt.ylim(top=10)
plt.xlim(right=20)

### 3.5 Curva
plt.plot(ts,ys,'-')

### 3.6 Mostrar el gráfico
plt.show()<jupyter_output>y(0) = 17.0
y(1) = 16.07512624888705
y(2) = 15.159963578666787
y(3) = 14.254758898020194
y(4) = 13.359765540148587
y(5) = 12.47524333976715
y(6) = 11.601458788081242
y(7) = 10.738685051832334
y(8) = 9.887202291998358
y(9) = 9.047297837329198<jupyter_text>**Ejercicio 2.2 d**: Resolver la siguiente ecuación diferencial$y''(t)+2y'(t)+10y(0)=80;\quad y(0)=10\quad$ y $\quad y'(0)=13$<jupyter_code>#========================================================================
# PARTE 1: Definir la ecuación diferencial dt/dy
#========================================================================

### 1.1 Ecuación
def f(u,t):
  return (u[1],-2*u[1]-10*u[0]+80)

#========================================================================
# PARTE 2: Definiendo valores
#========================================================================

### 2.1 Establcer las condiciones iniciales
y0=[10,13]

### 2.2 Instantes del tiempo
ts=np.linspace(0,10,200)

### 2.3 Resolver la ecuación diferencial
us=odeint(f,y0,ts)
ys=us[:,0]

### 2.4 Mostramos los 6 valores principales
for i in range(0,10):
  print(f'y({i}) = {ys[i]}')

#========================================================================
# PARTE 3: Graficar resultados
#========================================================================

### 3.1 Labels
plt.title("Convergencia", fontsize=30)
plt.xlabel('time', fontsize=30)
plt.ylabel('y(t)', fontsize=30)

### 3.2 Cuadrícula
plt.grid()

### 3.3 Tamaño
plt.rcParams["figure.figsize"] = (30, 10)

### 3.4 Línea de "convergencia"
plt.axhline(y=8, color='r', linestyle='-')

###3.5 Ajuste de ejes
plt.ylim(6,12)
plt.xlim(right=10)

### 3.5 Curva
plt.plot(ts,ys,'-')

### 3.6 Mostrar el gráfico
plt.show()<jupyter_output>y(0) = 10.0
y(1) = 10.59452379581274
y(2) = 11.070000054491716
y(3) = 11.426412684113867
y(4) = 11.666601714818173
y(5) = 11.795921772324656
y(6) = 11.821873528758767
y(7) = 11.753718608042565
y(8) = 11.60208916412115
y(9) = 11.378601942605314
{'fraction_non_alphanumeric': 0.36449686908402507, 'fraction_numerical': 0.15902140672782875, 'mean_word_length': 6.526027397260274, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 41, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '663448', 'license': 'MIT', 'n_tokens_mistral': 6468, 'n_tokens_neox': 5127, 'n_words': 973, 'path': 'Material/Solucionario/Dirigidas/01/PD_ 01_Ecuaciones_Diferencial-Solución.ipynb', 'repo_name': 'JoelNVD/Dynamic_Macroeconomics-Practices', 'size': '13755'}