Escolha um item dos exercícios 1 ou 2 e crie um código em Python ou MATLAB que resolva-o e que calcule a derivada através de diferenças finitas.

Passo 1

Beleza, o enunciado pede para a gente escolher um dos itens dos exercícios 1 ou 2 e criar um código em Python (ou MATLAB) que resolva o problema e, de quebra, calcule a derivada usando diferenças finitas. Isso cai em “Análise Numérica” na parte de “Derivadas Numéricas”. Para isso vamos precisar:
  1. Definir a função que queremos derivar.
  2. Entender as fórmulas de diferenças finitas (forward, backward e central).
  3. Implementar o código que aplica essas fórmulas e retorna as aproximações da derivada.

Passo 2

Vou escolher o Exercício 1, que diz (hipoteticamente):
“Seja f'(x)approxf(x+h)-f(x)h . Calcule numericamente f'(x)approxf(x)-f(x-h)h usando diferenças finitas.”
A teoria:
  • Forward difference:
f'(x)approxf(x+h)-f(x-h)2h
  • Backward difference:
  • Central difference (mais preciso):
Aqui é o “passinho” que damos em . Quanto menor , teoricamente melhor, até pegar erros de máquina.

Passo 3

Vamos montar o código em Python. Primeiro, definimos a função e depois três funções que calculam cada fórmula de diferenças:
import numpy as np

# Função que queremos derivar
def f(x):
    return x**2 + 3*x

# Derivada exata (para comparar)
def f_exata(x):
    return 2*x + 3

# Fórmulas de diferenças finitas
def deriv_forward(x, h):
    return (f(x + h) - f(x)) / h

def deriv_backward(x, h):
    return (f(x) - f(x - h)) / h

def deriv_central(x, h):
    return (f(x + h) - f(x - h)) / (2*h)

# Ponto onde vamos derivar
x0 = 1.0

# Testamos vários h
hs = [1e-1, 1e-2, 1e-3, 1e-4]

print("Aproximações para f'(1) com f(x)=x^2+3x")
for h in hs:
    fwd = deriv_forward(x0, h)
    bwd = deriv_backward(x0, h)
    cen = deriv_central(x0, h)
    exa = f_exata(x0)
    print(f"h={h:.0e}: forward={fwd:.6f}, backward={bwd:.6f}, central={cen:.6f}, exata={exa:.6f}")

Passo 4

Explicando o que o código faz, passo a passo:
  1. Importamos o NumPy só por conveniência (mas nem usamos funções avançadas).
  2. Definimos f(x) e sua derivada analítica f_exata(x)=2x+3 (só pra comparar o quão ruim ou bom são as aproximações).
  3. Criamos três funções que implementam as fórmulas vistas acima.
  4. Escolhemos o ponto f'(1)=2cdot1+3=5 .
  5. Percorremos vários valores de (de até ) e mostramos as aproximações de cada método, comparando com o valor exato, que é

Passo 5

Se você rodar esse script, vai ver algo tipo:
h=1e-1: forward=5.100000, backward=4.900000, central=5.000000, exata=5.000000
h=1e-2: forward=5.010000, backward=4.990000, central=5.000000, exata=5.000000
h=1e-3: forward=5.001000, backward=4.999000, central=5.000000, exata=5.000000
h=1e-4: forward=5.000100, backward=4.999900, central=5.000000, exata=5.000000
A gente percebe que a fórmula central converge mais rápido (já dá 5.000000 mesmo com ).

Resposta

Código em Python que resolve o Exercício 1 (função , calcula via diferenças finitas) conforme acima. Os resultados mostram que, para pequeno, todas se aproximam de 5 (o valor exato), e a fórmula central é a mais precisa para mesmo valor de .

Exercícios relacionados