Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
9 Hrs
44 Min
19 Seg

Soluciones numéricas vs. exactas

7/12

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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!!