Modelos matemáticos
Modelos Matemáticos: Conceptos Básicos y Aplicaciones
Modelado de Sistemas Dinámicos con Funciones Matemáticas y Python
Ecuaciones Diferenciales Ordinarias: Modelos de Epidemias
Resolución de EDOs para Modelar Epidemias con Python
Convección y Sistemas Dinámicos: El Modelo de Lorenz
Modelos númericos
Método de Euler: Solución Numérica de Ecuaciones Diferenciales
Solución Numérica y Exacta de Ecuaciones Diferenciales
Sistemas caóticos
Comparación de Métodos: Runge-Kutta 4 vs Euler en Ecuaciones Diferenciales
Resolución del Sistema de Lorenz con Método RK4
Modelos epidemiológicos
Modelo SIR: Simulación Numérica de Epidemias con RK4
Modelos SIR y el Número Básico de Reproducción (R₀)
Modelado Epidemiológico con SIRD y Algoritmo de Evolución Diferencial
Lectura
En la clase pasada resolvimos una ecuación diferencial muy sencilla con el método de Euler, pero mencionamos también que esa misma ecuación diferencial se puede resolver con métodos del cálculo y el álgebra tradicionales, por ejemplo, por medio de separación de variables, para obtener:
...
Regístrate o inicia sesión para leer el resto del contenido.
Aportes 3
Preguntas 0
La ultima parte no quería salir de regresión lineal no quería salir pero por alguna razón fue necesario hacer una modificación, demasiados decimales me parece.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
def exact_sol(ts): return np.exp(ts)
def num_sol(ts, dt, tf=10, y0=1):
ys = [y0]
ts = [0]
num_steps = int(tf/dt)
for _ in range(num_steps):
ts.append(ts[-1]+dt)
ys.append((1+dt)*ys[-1])
return ts, ys
if __name__=='__main__':
ys = [1] # creamos un areglo inicial de valores en y
ts = [0] # creamos un areglo inicial de valores en t
dt = 0.01
num_steps = 1000
for i in range(num_steps):
ts.append(ts[-1]+dt) # calculamos el proximo t y lo agregamos al arreglo
ys.append((1+dt)*ys[-1]) # calculamos el proximo y y lo agregamos al arreglo
#print (ts)
#print(ys)
plt.figure(figsize=(15,8))
plt.plot(ts,ys)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
#plt.show()
plt.figure(figsize=(12,6))
for dt in [0.1, 0.05, 0.01]:
ts, ys = num_sol(ts, dt)
plt.plot(ts, ys, '--', label='dt = {}'.format(dt))
plt.plot(ts,exact_sol(ts), label='exact')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.legend(fontsize=20)
#plt.show()
plot_text_size = 20
local_error = []
dt_arr = []
dt_arr = np.arange(0.0001, 0.5, 0.0001)
for dt in dt_arr:
ts, ys_num = num_sol(ts, dt=dt)
ys_ex = exact_sol(ts)
local_error.append(np.abs(ys_num[-1] - ys_ex[-1]))
plt.figure(figsize=(10,8))
plt.xscale('log')
plt.yscale('log')
plt.plot(dt_arr,local_error)
plt.plot(dt_arr[:-4900], local_error[:-4900],'-*r')
plt.xticks(fontsize=plot_text_size)
plt.yticks(fontsize=plot_text_size)
plt.xlabel(r'$(\Delta t)$',fontsize=plot_text_size)
plt.ylabel(r'$(\Delta E)$', fontsize=plot_text_size)
local_error = np.array(local_error)
x = np.log(dt_arr[:-4900])
x = np.log(dt_arr[:-4900]).reshape(-1,1)
y = np.log(local_error[:-4900])
#reg = LinearRegression().fit(x, y)
reg = LinearRegression(fit_intercept=True, normalize=True, copy_X=True, n_jobs=None).fit(x.astype(np.float32), y)
print(reg.score(x,y))
print(reg.coef_)
fig, ax = plt.subplots(1, 1, figsize=(7,7), dpi=120)
ax.plot(x, y, label='Regresion Lineal', marker='o', linestyle='dashed')
ax.legend()
plt.show()
RPTA:
λ py metodo_euler.py
0.9999677987793394
[0.989571]
Buen tema
Gracias!!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?