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]
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?