<jupyter_start><jupyter_text>Como saber se os resultados estão convergindo corretamente?Vamos começar com um método bastante simples, mas muitas vezes eficaz:veremos como o método de Euler se comporta em casos em que conhecemos a resposta,e buscaremos aí algumas intuições para o caso geral.<jupyter_code>from funcionario import euler_npts<jupyter_output><empty_output><jupyter_text>Vejamos novamente uma EDO: $y' = 2y$.<jupyter_code>def F(t,y):
    return 2*y

def ansF(t,t0,y0): return np.exp(2*(t-t0))*y0<jupyter_output><empty_output><jupyter_text>Erros ao mudar o número de passos Gráficos das soluções<jupyter_code>ns = [10,20,30]
for n in ns:
    ts, ys = euler_npts(F, [0,1], y0=1.2, npts=n, retpts=True)
    plt.plot(ts, ys, 'x:', label=str(n))
    # Tentar outros estilos: ., o; --, -., ...

plt.plot(ts, ansF(ts,0,1.2), label='exata')
plt.xlabel('t')
plt.legend(title='nstep')
plt.title('Euler explícito: solução')
plt.show()<jupyter_output><empty_output><jupyter_text>Gráficos dos erros<jupyter_code>ns = [10,20,30]
for n in ns:
    ts, ys = euler_npts(F, [0,1], y0=1.2, npts=n, retpts=True)
    plt.plot(ts, ys - ansF(ts,0,1.2), 'x:', label=str(n))

plt.xlabel('t')
plt.legend(title='nstep')
plt.title('Euler explícito: erro')
plt.show()<jupyter_output><empty_output><jupyter_text>Gráficos dos erros relativosO erro relativo é sempre dado por$$ \frac{\text{Valor calculado} - \text{Valor exato}}{\text{Valor exato}}. $$Ou, quando estamos com pressa de escrever:$$ \frac{\hat x - x}{x},$$onde subentende-se que $x$ é a resposta correta, enquanto $\hat x$, o valor que calculamos no computador.<jupyter_code>ns = [10,20,30]
for n in ns:
    ### Resposta aqui


plt.xlabel('t')
plt.legend(title='nstep')
plt.title('Euler explícito: erro relativo')
plt.show()<jupyter_output><empty_output><jupyter_text>Generalizando: aumentando muito mais o número de passosAgora que temos um gráfico que parece ser bom para ver erros, vamos aumentar $n$ ;-)<jupyter_code>ns = np.arange(100,500,step=30)
### Resposta aqui<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15026921194322077, 'fraction_numerical': 0.023984336759667158, 'mean_word_length': 5.976109215017065, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, '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': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '455178', 'license': 'MIT', 'n_tokens_mistral': 896, 'n_tokens_neox': 850, 'n_words': 197, 'path': 'comp-cientifica-I-2018-2/semana-2/raw_files/.ipynb_checkpoints/Euler erros-checkpoint.ipynb', 'repo_name': 'mirandagil/university-courses', 'size': '2043'}