Modelos matemáticos
Introducción a los modelos matemáticos
¿Qué es un sistema dinámico?
Modelos Estocásticos vs. Modelos Determinísticos
El lenguaje del Determinismo y las EDOs
Sistemas complejos y la imposibilidad de una solución exacta
Modelos númericos
Modelos numéricos al rescate
Soluciones numéricas vs. exactas
Sistemas caóticos
Fórmula RK4 vs. fórmula de Euler
Solución al sistema de Lorenz
Modelos epidemiológicos
Modelo SIR
Mejorando el modelo SIR
Ajustando un modelo epidemiológico a datos reales
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?
o inicia sesión.