# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# + [markdown] slideshow={"slide_type": "slide"}
# # Aproximações e Erros de Arredondamento
#
#  _Prof. Dr. <NAME>_

# + [markdown] slideshow={"slide_type": "fragment"}
# ## **Erros de Arredondamento**
# ### Épsilon de Máquina
#
# -

#Calcula o épsilon de máquina
epsilon = 1
while (epsilon+1)>1:
    epsilon = epsilon/2
epsilon = 2 * epsilon
print(epsilon)

# Aproximação de uma função por Série de Taylor
#

# + tags=[]
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return -0.1*x**4 -0.15*x**3 -0.5*x**2 -0.25*x +1.2

def df(x):
    return -0.4*x**3 -0.45*x**2 -1.0*x -0.25

def ddf(x):
    return -1.2*x**2 -0.9*x -1.0

def dddf(x):
    return -2.4*x -0.9

def d4f(x):
    return -2.4
x1 = 0 
x2 = 1 
# Aproximação de ordem zero
fO_0 = f(x1)           # Valor previsto
erroO_0 = f(x2) - fO_0 # valor exato menos o valor previsto

# Aproximação de primeira ordem
fO_1 = f(x1) + df(x1)*(x2-x1)         # Valor previsto
erroO_1 = f(x2) - fO_1 # valor exato menos o valor previsto

# Aproximação de segunda ordem
fO_2 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2       # Valor previsto
erroO_2 = f(x2) - fO_2 # valor exato menos o valor previsto

# Aproximação de terceira ordem
fO_3 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2 + (dddf(x1)/6)*(x2-x1)**3    # Valor previsto 3!=3*2*1=6
erroO_3 = f(x2) - fO_3 # valor exato menos o valor previsto

# Aproximação de quarta ordem
fO_4 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2 + (dddf(x1)/6)*(x2-x1)**3 + (d4f(x1)/24)*(x2-x1)**4 # Valor previsto 4!=4*3*2*1=24
erroO_4 = f(x2) - fO_4 # valor exato menos o valor previsto

print('Ordem  ~f(x)    Erro')
print('0      {0:8f} {1:3f}'.format(fO_0, erroO_0))
print('1      {0:8f} {1:8f}'.format(fO_1, erroO_1))
print('2      {0:8f} {1:8f}'.format(fO_2, erroO_2))
print('3      {0:8f} {1:8f}'.format(fO_3, erroO_3))
print('4      {0:8f} {1:8f}'.format(fO_4, erroO_4))


# Plotagem dos gráficos
xx = np.linspace(-2,2.0,40)
yy = f(xx)

plt.plot(xx,yy,'b',x2,fO_0,'*',x2,fO_1,'*r', x2, fO_2, '*g', x2, fO_3,'*y', x2, fO_4, '*r')
plt.savefig('exemplo1.png')
plt.show()




# + tags=[]
# Exercício do dia 17/08/2020

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.sin(x)

def df(x):
    return np.cos(x)

def ddf(x):
    return -np.sin(x)

def dddf(x):
    return -np.cos(x)

def d4f(x):
    return np.sin(x)
x1 = np.pi/2
x2 = 3*np.pi/4 # igual a pi/2 +pi/4
# Aproximação de ordem zero
fO_0 = f(x1)           # Valor previsto
erroO_0 = f(x2) - fO_0 # valor exato menos o valor previsto

# Aproximação de primeira ordem
fO_1 = f(x1) + df(x1)*(x2-x1)         # Valor previsto
erroO_1 = f(x2) - fO_1 # valor exato menos o valor previsto

# Aproximação de segunda ordem
fO_2 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2       # Valor previsto
erroO_2 = f(x2) - fO_2 # valor exato menos o valor previsto

# Aproximação de terceira ordem
fO_3 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2 + (dddf(x1)/6)*(x2-x1)**3    # Valor previsto 3!=3*2*1=6
erroO_3 = f(x2) - fO_3 # valor exato menos o valor previsto

# Aproximação de quarta ordem
fO_4 = f(x1) + df(x1)*(x2-x1) + (ddf(x1)/2)*(x2-x1)**2 + (dddf(x1)/6)*(x2-x1)**3 + (d4f(x1)/24)*(x2-x1)**4 # Valor previsto 4!=4*3*2*1=24
erroO_4 = f(x2) - fO_4 # valor exato menos o valor previsto

print('Ordem  ~f(x)    Erro')
print('0      {0:8f} {1:3f}'.format(fO_0, erroO_0))
print('1      {0:8f} {1:8f}'.format(fO_1, erroO_1))
print('2      {0:8f} {1:8f}'.format(fO_2, erroO_2))
print('3      {0:8f} {1:8f}'.format(fO_3, erroO_3))
print('4      {0:8f} {1:8f}'.format(fO_4, erroO_4))


# Plotagem dos gráficos
xx = np.linspace(0,2.*np.pi,40)
yy = f(xx)

plt.plot(xx,yy,'b',x2,fO_0,'*',x2,fO_1,'*b', x2, fO_2, '*g', x2, fO_3,'*y', x2, fO_4, '*r')
plt.savefig('exemplo2.png')
plt.show()




# + [markdown] slideshow={"slide_type": "fragment"}
# ### Exercício - Aula 17/08/2020
# Utilizando o exemplo anterior faça expansões de Taylor para a função seno, de ordem zero até ordem 4, a partir de $x = \pi/2$ com $h = \pi/4$, ou seja, para estimar o valor da função em $x_{i+1} = 3 \pi/4$. E responda os check de verificação no AVA:
#
# 1. Check: Qual o erro da estimativa de ordem zero?
# 2. Check: Qual o erro da estimativa de quarta ordem?
#

# + [markdown] slideshow={"slide_type": "fragment"}
# ### Exercício - Aula 24/08/2020
# Utilizando os exemplo e exercícios anteriores faça os gráficos das expansões de Taylor para as funções estudadas, de ordem zero até ordem 4, salve o arquivo em formato png e faça o upload no AVA.

# + [markdown] slideshow={"slide_type": "fragment"}
# ## Referências

# + [markdown] slideshow={"slide_type": "fragment"}
# <NAME>. (2013). **Numerical Methods in Engineering With Python 3**. Cambridge: Cambridge.<br>
# Brasil, R.M.L.R.F, <NAME>., <NAME>. (2015) **Métodos Numéricos e Computacionais na Prática de Engenharias e Ciências**, São Paulo: <NAME>
# -





StarcoderdataJupyterScriptsDedupFiltered