Mostrando postagens com marcador MathGPT. Mostrar todas as postagens
Mostrando postagens com marcador MathGPT. Mostrar todas as postagens

quarta-feira, 3 de junho de 2026

Métodos Numéricos para Derivadas: Aumentando a Acurácia

Calcular a derivada de uma função numericamente é uma tarefa comum em muitas áreas da ciência e engenharia. Uma das primeiras e mais intuitivas abordagens é usar a definição da derivada com um pequeno passo $h$. Podemos, por exemplo, usar a fórmula

$$ f'(x) \approx \frac{f(x+h) - f(x-h)}{2h} $$

que é um método eficiente e amplamente utilizado. Vamos detalhar essa e outras técnicas para obter maior acurácia.

A Diferença Central de Segunda Ordem

A expressão $f'(x) \approx \frac{f(x+h)-f(x-h)}{2h}$ é conhecida como a **diferença central de segunda ordem**. Ela é chamada assim porque utiliza pontos simetricamente posicionados ($x+h$ e $x-h$) em torno do ponto $x$.

$$ f'(x) \approx \frac{f(x+h) - f(x-h)}{2h} $$

Esta fórmula tem a vantagem de ser exata para polinômios de até grau 2. O principal termo de erro associado a esta aproximação é proporcional a $h^2$ (o erro é $O(h^2)$). Isso significa que, se você reduzir o passo $h$ pela metade, o erro de truncamento será dividido por 4.

Outras Expressões para Maior Acurácia

Existem várias maneiras de melhorar a precisão do cálculo numérico da derivada, geralmente utilizando mais pontos de avaliação ou combinando resultados de diferentes passos.

1. Diferença Central de Quarta Ordem

Para obter uma acurácia ainda maior, podemos usar uma fórmula que emprega mais pontos. A diferença central de quarta ordem é exata para polinômios de até grau 4. O termo de erro principal aqui é proporcional a $h^4$.

$$ f'(x) \approx \frac{1}{12h} \left[ -f(x+2h) + 8f(x+h) - 8f(x-h) + f(x-2h) \right] $$

Esta fórmula utiliza 5 pontos: $f(x-2h), f(x-h), f(x), f(x+h), f(x+2h)$. A redução do erro é significativa quando comparada com a fórmula de segunda ordem, especialmente para funções suaves.

2. Diferença Central de Sexta Ordem

A Diferença Central de Sexta Ordem é um método numérico avançado para aproximar a primeira derivada de uma função $f(x)$. Ela se destaca pela sua alta precisão, sendo exata para polinômios de até grau 5 e com um erro de truncamento da ordem de $O(h^6)$.

Para aplicar esta fórmula, são necessários 6 pontos da função, distribuídos simetricamente em torno do ponto $x$.

A expressão para a primeira derivada $f'(x)$ utilizando a Diferença Central de Sexta Ordem é a seguinte:

$$ f'(x) \approx \frac{1}{60h} \left[ -f(x+3h) + 9f(x+2h) - 45f(x+h) + 45f(x-h) - 9f(x-2h) + f(x-3h) \right] $$

Alternativamente, a fórmula pode ser escrita de forma mais simétrica, agrupando os termos que envolvem pontos em direções opostas:

$$ f'(x) \approx \frac{1}{60h} \left[ (f(x+3h) - f(x-3h)) - 9(f(x+2h) - f(x-2h)) + 45(f(x+h) - f(x-h)) \right] $$

Componentes da Fórmula

  • $f(x)$: A função cujos pontos são avaliados.
  • $x$: O ponto onde a derivada está sendo calculada.
  • $h$: Um pequeno passo, positivo e real. O tamanho de $h$ afeta tanto o erro de truncamento quanto o erro de arredondamento.
  • $f(x+kh)$ e $f(x-kh)$: Avaliações da função em pontos adiante e atrás de $x$, com múltiplos $k$ do passo $h$.
  • Os coeficientes (1, -9, 45 no termo agrupado simetricamente) são determinados para maximizar a ordem de acurácia.

Esta fórmula é particularmente útil quando se busca alta precisão em cálculos de derivadas, desde que a função seja suave o suficiente e os pontos necessários estejam disponíveis para avaliação.

3. Fórmulas de Maior Ordem (Diferenças Diretas/Retrocesso)

Em situações onde não é possível usar pontos de ambos os lados de $x$ (por exemplo, nos limites de um intervalo), fórmulas diretas (forward differences) ou de retrocesso (backward differences) de ordem superior podem ser empregadas. Embora geralmente menos precisas que as diferenças centrais para o mesmo número de pontos, elas são úteis em contextos específicos.

Diferença Direta de Terceira Ordem (usando 4 pontos):

$$ f'(x) \approx \frac{1}{6h} \left[ -11f(x) + 18f(x+h) - 9f(x+2h) + 2f(x+3h) \right] $$ O erro é $O(h^3)$.

Diferença de Retrocesso de Terceira Ordem (usando 4 pontos):

$$ f'(x) \approx \frac{1}{6h} \left[ -2f(x-3h) + 9f(x-2h) - 18f(x-h) + 11f(x) \right] $$ O erro é $O(h^3)$.

4. Extrapolação de Richardson

A Extrapolação de Richardson é uma técnica poderosa para melhorar a acurácia de métodos de aproximação numérica. A ideia é calcular a aproximação da derivada com um passo $h$ e, em seguida, com um passo menor (por exemplo, $h/2$), e combinar esses dois resultados para "eliminar" os termos de erro de ordem inferior.

Para a diferença central de segunda ordem, que tem erro $O(h^2)$, podemos obter uma aproximação de quarta ordem. Seja $D(h) = \frac{f(x+h)-f(x-h)}{2h}$.

Uma aproximação melhorada é dada por:

$$ f'(x) \approx \frac{4 \cdot D(h/2) - D(h)}{3} $$

Esta fórmula, obtida pela combinação de duas aproximações com passos diferentes, resulta em uma precisão $O(h^4)$, similar à da diferença central de quarta ordem, mas com a conveniência de usar apenas a fórmula de segunda ordem como base. Podemos obter um valor ainda melhor para a derivada $f'(x)$ usando a aproximação de quarta ordem ($D(h) \approx \frac{1}{12h}(-f(x+2h) + 8f(x+h) - 8f(x-h) + f(x-2h)) $) e a Extrapolação de Richardson. A expressão se torna:

$$ f'(x) \approx \frac{16 \cdot D(h/2) - D(h)}{15} $$

Qual Método Escolher?

A escolha do método depende dos requisitos de acurácia e das restrições computacionais:

  • Para alta acurácia em funções suaves, a **diferença central de quarta ordem** ou a **extrapolação de Richardson** (partindo da diferença central de segunda ordem) são geralmente as melhores opções.
  • Se você precisa calcular a derivada perto das bordas de um domínio onde pontos simétricos não estão disponíveis, fórmulas diretas ou de retrocesso de maior ordem podem ser necessárias.

É importante notar que, independentemente do método, a escolha do passo $h$ é crucial. Um $h$ muito grande resulta em um erro de truncamento significativo, enquanto um $h$ muito pequeno pode levar a erros de arredondamento devido à subtração de números muito próximos. Geralmente, um $h$ entre $10^{-3}$ e $10^{-6}$ é um bom ponto de partida para muitas aplicações.

quarta-feira, 27 de maio de 2026

Cálculo Numérico: convolução usando o Scilab

Cálculo da Convolução de Sinais

Cálculo da convolução dos sinais $x(t) = cos(2t)$ e $h(t) = e^{-t}$

Vamos calcular a convolução entre dois sinais definidos para $t \ge 0$:

  • Sinal $x(t) = \cos(2t)$, para $t \ge 0$.
  • Sinal $h(t) = e^{-t}$, para $t \ge 0$.

A convolução entre dois sinais $x(t)$ e $h(t)$, denotada por $y(t) = x(t) * h(t)$, é definida pela seguinte integral:

$$ y(t) = \int_{-\infty}^{\infty} x(\tau) h(t-\tau) d\tau $$

Passo a Passo do Cálculo

1. Definição dos Sinais no Domínio da Integral

Precisamos expressar $x(\tau)$ e $h(t-\tau)$ considerando seus domínios de definição:

  • $x(\tau) = \cos(2\tau)$ se $\tau \ge 0$, e $0$ caso contrário.
  • $h(t-\tau) = e^{-(t-\tau)}$ se $t-\tau \ge 0$, o que implica $\tau \le t$. E $0$ caso contrário.

2. Determinando os Limites de Integração

Para que o produto $x(\tau)h(t-\tau)$ seja diferente de zero, ambas as condições devem ser satisfeitas:

  • $\tau \ge 0$ (para $x(\tau)$ ser não nulo)
  • $\tau \le t$ (para $h(t-\tau)$ ser não nulo)

Essas condições implicam que a integral só terá valores não nulos para $t \ge 0$. Portanto, os limites de integração para $\tau$ são de $0$ a $t$.

3. Expressão da Integral de Convolução

A integral de convolução para $t \ge 0$ se torna:

$$ y(t) = \int_{0}^{t} \cos(2\tau) e^{-(t-\tau)} d\tau $$

Para $t < 0$, a convolução é $y(t) = 0$.

4. Simplificando a Integral

Podemos fatorar o termo $e^{-t}$ para fora da integral, pois ele não depende da variável de integração $\tau$:

$$ y(t) = e^{-t} \int_{0}^{t} \cos(2\tau) e^{\tau} d\tau $$

5. Resolvendo a Integral Definida

Agora, focamos em resolver a integral: $\int_{0}^{t} \cos(2\tau) e^{\tau} d\tau$. Usaremos a fórmula geral para a integral de $e^{ax} \cos(bx)$:

$$ \int e^{ax} \cos(bx) dx = e^{ax} \left( \frac{a \cos(bx) + b \sin(bx)}{a^2 + b^2} \right) $$

Neste caso, temos $a=1$ e $b=2$. A antiderivada de $e^{\tau} \cos(2\tau)$ é:

$$ \int e^{\tau} \cos(2\tau) d\tau = e^{\tau} \left( \frac{1 \cdot \cos(2\tau) + 2 \cdot \sin(2\tau)}{1^2 + 2^2} \right) = e^{\tau} \left( \frac{\cos(2\tau) + 2 \sin(2\tau)}{5} \right) $$

Avaliamos esta antiderivada nos limites de integração de $0$ a $t$:

$$ \left[ e^{\tau} \left( \frac{\cos(2\tau) + 2 \sin(2\tau)}{5} \right) \right]_{0}^{t} $$ $$ = \left( e^{t} \left( \frac{\cos(2t) + 2 \sin(2t)}{5} \right) \right) - \left( e^{0} \left( \frac{\cos(0) + 2 \sin(0)}{5} \right) \right) $$ $$ = \frac{e^{t}}{5} (\cos(2t) + 2 \sin(2t)) - \frac{1}{5} (1 + 0) $$ $$ = \frac{e^{t}}{5} (\cos(2t) + 2 \sin(2t)) - \frac{1}{5} $$

6. Obtendo o Resultado Final

Agora, multiplicamos o resultado da integral definida por $e^{-t}$ (que tínhamos fatorado anteriormente):

$$ y(t) = e^{-t} \left[ \frac{e^{t}}{5} (\cos(2t) + 2 \sin(2t)) - \frac{1}{5} \right] $$

Distribuindo o termo $e^{-t}$:

$$ y(t) = e^{-t} \cdot \frac{e^{t}}{5} (\cos(2t) + 2 \sin(2t)) - e^{-t} \cdot \frac{1}{5} $$

Como $e^{-t} \cdot e^{t} = e^{0} = 1$, a expressão simplifica para:

$$ y(t) = \frac{1}{5} (\cos(2t) + 2 \sin(2t)) - \frac{1}{5} e^{-t} $$

Conclusão

Portanto, a convolução dos sinais $x(t) = \cos(2t)$ e $h(t) = e^{-t}$ (ambos definidos para $t \ge 0$) é dada por:

$$ y(t) = \frac{1}{5} \cos(2t) + \frac{2}{5} \sin(2t) - \frac{1}{5} e^{-t}, \quad \text{para } t \ge 0 $$

E $y(t) = 0$ para $t < 0$.

Podemos também escrever a resposta de forma mais compacta como:

$$ y(t) = \frac{1}{5} \left( \cos(2t) + 2 \sin(2t) - e^{-t} \right), \quad t \ge 0 $$

Usando o Scilab

Código Scilab:

dt = 0.01;
t=0:dt:10; tm = max(size(t));
h=exp(-t);
x = cos(2*t);
yt = (1/5)*(cos(2*t) + 2*sin(2*t) - exp(-t));
y=dt*convol(x,h);
figure;
subplot(2,2,1);
plot(t(1:tm),h(1:tm)); title('h(t)');
subplot(2,2,2);
plot(t(1:tm),x(1:tm)); title('x(t)');
subplot(2,1,2);
plot(t(1:tm),y(1:tm),t,yt);
title('y(t) = x(t)*h(t)');
legend('Conv. numérica - Scilab','Conv. teórica',4);

Resultado gráfico:

quarta-feira, 29 de abril de 2026

Interpolação: algumas vezes o mais simples funciona melhor!

Sobre a Interpolação

A interpolação é uma ferramenta poderosa usada em diversas áreas quando temos dados em pontos discretos e precisamos estimar valores em pontos intermediários, ou quando precisamos de uma função contínua que passe exatamente por esses pontos. Abaixo estão alguns exemplos de situações onde a interpolação é aplicada:

1. Preenchimento de Dados Faltantes ou Estimativas

  • Previsão do Tempo e Monitoramento Climático: Sensores medem a temperatura, pressão ou umidade em locais e horários específicos. Para criar mapas de temperatura contínuos ou estimar o valor em uma cidade sem estação meteorológica, a interpolação é usada com base nos pontos de medição conhecidos.
  • Mercado Financeiro: O preço de uma ação é registrado ao final de cada dia. Se você precisa saber o valor aproximado da ação em um determinado momento durante o dia (ex: meio-dia), a interpolação linear entre os preços de abertura e fechamento pode ser usada. Curvas de juros (yield curves) são construídas interpolando taxas de juros conhecidas para diferentes prazos.
  • Dados Geográficos: A elevação de um terreno pode ser medida em pontos específicos. Para gerar um modelo digital de elevação contínuo ou estimar a altitude em um ponto arbitrário, técnicas de interpolação espacial são aplicadas.

2. Engenharia e Design

  • Design de Perfis Aerodinâmicos: A forma de uma asa de avião é definida por pontos de controle. Um polinômio ou spline é usado para criar uma curva suave que passa por esses pontos, definindo o perfil exato da asa.
  • Análise Estrutural (Método dos Elementos Finitos - MEF): Em simulações de engenharia, as propriedades (como tensão ou deslocamento) são calculadas em pontos discretos (nós) da malha. A interpolação é usada para estimar essas propriedades em qualquer ponto dentro de um elemento da malha.
  • Fabricação: Ao usarmos máquinas de controle numérico (CNC), a trajetória da ferramenta é frequentemente definida por um conjunto de pontos. A interpolação garante que a máquina siga uma linha ou curva suave entre esses pontos.

3. Ciência e Pesquisa

  • Química e Física (Curvas de Calibração): Em experimentos, criamos uma curva de calibração medindo a resposta de um instrumento para concentrações conhecidas de uma substância. Se medirmos uma amostra desconhecida e sua resposta cair entre dois pontos da curva de calibração, usamos interpolação para determinar sua concentração.
  • Biologia e Medicina: Dados de crescimento de pacientes (altura vs. idade), ou a concentração de um medicamento no sangue ao longo do tempo, podem ser interpolados para estimar valores em momentos não medidos.
  • Processamento de Sinais e Imagens: Ao redimensionar uma imagem digital, é preciso estimar os valores de cor dos novos pixels. A interpolação (como a bilinear ou bicúbica) é usada para calcular esses novos valores com base nos pixels vizinhos.

4. Computação Gráfica

  • Animação: Para animar um objeto, definimos sua posição ou rotação em quadros-chave (pontos discretos). A interpolação é usada para gerar os quadros intermediários, criando movimento suave entre os quadros-chave.
  • Modelagem 3D: Superfícies 3D são frequentemente definidas por um conjunto de pontos de controle. Técnicas baseadas em interpolação ou aproximação são usadas para criar superfícies curvas e suaves.

Em essência, sempre que temos informações pontuais e precisamos de uma representação contínua ou estimativas intermediárias confiáveis, a interpolação se torna uma ferramenta indispensável.

Principais Técnicas de Interpolação: do Simples ao Avançado

A interpolação é o processo de encontrar uma função que passa exatamente por um conjunto de pontos de dados conhecidos. Existem diversas técnicas, cada uma com suas vantagens e desvantagens, dependendo da natureza dos dados e da aplicação. Apresentamos aqui as principais, ordenadas aproximadamente da mais simples para a mais avançada:

1. Interpolação Linear por Pedaços (Piecewise Linear Interpolation)

Conceito

É a forma mais básica de interpolação. Consiste em conectar cada par de pontos consecutivos com um segmento de reta. Para encontrar um valor entre dois pontos conhecidos \((x_i, y_i)\) e \((x_{i+1}, y_{i+1})\), utiliza-se a equação de uma reta.

Características

  • Simplicidade: Extremamente fácil de entender e implementar.
  • Eficiência Computacional: Rápida para calcular.
  • Continuidade: A função resultante é contínua, mas não necessariamente suave (pode ter "quinas" nos pontos de dados).
  • Precisão Limitada: Pode não ser precisa para dados que não seguem um padrão linear entre os pontos.

É a técnica mais simples.

2. Interpolação Polinomial

Conceito

Busca encontrar um único polinômio que passa por todos os pontos de dados. Se tivermos \(n+1\) pontos, o polinômio terá grau no máximo \(n\).

Sub-técnicas Principais:

2.1. Interpolação de Lagrange

  • Ideia: Constrói o polinômio como uma soma ponderada de polinômios "base" (polinômios de Lagrange \(L_i(x)\)), onde cada \(L_i(x)\) vale 1 no ponto \(x_i\) e 0 nos demais \(x_j\) (\(j \neq i\)).
  • Vantagem: Fórmula direta e elegante.
  • Desvantagem: Recalcular todo o polinômio é necessário se um novo ponto for adicionado. Pode sofrer do "fenômeno de Runge" (oscilações excessivas entre os pontos) para muitos pontos.

2.2. Interpolação de Newton

  • Ideia: Constrói o polinômio de forma incremental, adicionando termos que corrigem a aproximação anterior. Utiliza "diferenças divididas" para calcular os coeficientes.
  • Vantagem: Mais eficiente para adicionar novos pontos sem recalcular tudo do zero. Oferece uma visão mais estruturada dos coeficientes.
  • Desvantagem: Similar ao Lagrange, pode sofrer com oscilações para muitos pontos.

2.3. Matriz de Vandermonde

  • Ideia: Define o polinômio \(P(x) = a_0 + a_1x + a_2x^2 + \dots + a_nx^n\). Ao substituir os pontos \((x_i, y_i)\), obtém-se um sistema linear de equações cuja matriz é a matriz de Vandermonde.
  • Vantagem: Formalmente direta para encontrar os coeficientes.
  • Desvantagem: Computacionalmente custosa e numericamente instável para um grande número de pontos, devido às propriedades da matriz de Vandermonde.

A interpolação polinomial única é a base de muitas técnicas, mas pode ser limitada por oscilações.

3. Interpolação por Splines

Conceito

Em vez de usar um único polinômio de alto grau para todos os pontos, a interpolação por splines divide o intervalo em subintervalos e usa polinômios de baixo grau (geralmente cúbicos) em cada subintervalo. As junções entre esses polinômios são feitas de forma a garantir suavidade.

Sub-técnicas Principais:

3.1. Splines Cúbicos (Cubic Splines)

  • Ideia: Usa polinômios de grau 3 em cada segmento. Garante que a função, sua primeira derivada e sua segunda derivada sejam contínuas nas junções (pontos de dados).
  • Vantagem: Produz curvas muito mais suaves e previsíveis que polinômios de alto grau. Minimiza oscilações e é a escolha padrão para muitos gráficos e modelagens.
  • Desvantagem: Mais complexa de implementar que a interpolação linear ou polinomial simples.

3.2. Splines Lineares (Linear Splines)

  • Ideia: É essencialmente a mesma que a Interpolação Linear por Pedaços, mas o termo "spline linear" é frequentemente usado neste contexto.
  • Vantagem/Desvantagem: Já descritas em "Interpolação Linear por Pedaços".

Existem também splines quadráticos e de ordens superiores, mas os cúbicos são os mais comuns.

4. Interpolação Trigonométrica

Conceito

Utiliza funções trigonométricas (senos e cossenos) para interpolar dados. É particularmente útil quando os dados exibem comportamento periódico.

Características

  • Ideal para Dados Periódicos: Captura eficientemente padrões repetitivos.
  • Base em Séries de Fourier: Frequentemente relacionada à representação de dados através de somas de senoides e cossenoides.
  • Complexidade: Requer conhecimento de análise de Fourier e pode ser mais complexa que métodos polinomiais básicos.

5. Interpolação Racional

Conceito

Em vez de usar um polinômio, utiliza funções racionais, que são a razão (divisão) de dois polinômios: \(R(x) = P(x) / Q(x)\).

Características

  • Flexibilidade: Pode ajustar dados com singularidades, assíntotes ou comportamentos mais complexos que polinômios simples não conseguem capturar bem.
  • Potencial de Melhor Ajuste: Para certos tipos de dados, pode oferecer um ajuste muito superior aos métodos polinomiais.
  • Complexidade: A determinação dos coeficientes pode ser mais complicada e pode apresentar problemas de não convergência ou instabilidade.

Considerada mais avançada devido à sua forma e métodos de cálculo.

A escolha da técnica de interpolação depende muito do problema específico, da quantidade e qualidade dos dados, e dos requisitos de precisão e suavidade da solução desejada.

Exemplo Numérico com Scilab

Apresentaremos agora um código Scilab que realiza a interpolação usando interpolação linear por partes, interpolação quadrática por partes, Newton e Lagrange. Para algumas funções, em alguns trechos, a interpolação linear ou a quadrática por partes pode resultar em um erro menor que os métodos de Newton e Lagrange. Newton e Lagrange são numericamente equivalentes. Função de teste: 

$$f(x) = xe^{-2x}$$.

Código:

clc;
close(winsid());

////////
function f=ff(x)
    // f = -sqrt(x) + x.*x - 0.5;
    // f = log(x+1) + sin(x/2);
    // f = sin(x/2) + sqrt(x);
    // f = cos(x) - sqrt(x)/2; // Linear melhor!
    // f = cos(x) - x.*x;
    // f = (1-exp(-x*2))./(1+0.5*exp(x*2)); // Linear melhor!
    f = x.*exp(-2*x); // Linear melhor!
    // f = 0.5*x.*x.*x - 2*x.*x - 3*x;
endfunction

// Pontos dados:
x = 0:4; x=x';
y = ff(x);

// Calculando o valor de f(xk):
xk = 2.8;
fk = ff(xk);

/// Interpolação linear:
pos = 1;
while xk>x(pos)
    pos = pos + 1;
end
pL = y(pos-1) + (y(pos)-y(pos-1))*(xk-x(pos-1))/(x(pos)-x(pos-1));

/// Interpolação quadrática:
p1 = pos;
if pos<2 then
    p1 = pos;
end
if pos>2 then
    p1 = pos-1;
end
p2 = p1+1;
p3 = p2+1;
if p3>max(size(y)) then
    p3 = p3 - 1;
    p2 = p2 - 1;
    p1 = p1 - 1;
end
x12 = (x(p1)-x(p2))
x32 = (x(p3)-x(p2))
M = [x12*x12 x12
     x32*x32 x32];
v = [y(p1)-y(p2)
     y(p3)-y(p2)];
ab = inv(M)*v;
pq = ab(1)*(xk-x(p2))*(xk-x(p2)) + ab(2)*(xk-x(p2)) + y(p2);

// Interpolação de Newton:
// Calculando as diferenças:
dx = diff(x);
dy = diff(y)./dx;
dx2 = x(3:$)-x(1:$-2);
dy2 = diff(dy)./dx2;
dx3 = x(4:$)-x(1:$-3);
dy3 = diff(dy2)./dx3;
dx4 = x(5:$)-x(1:$-4);
dy4 = diff(dy3)./dx4;
// Preparado para mostrar os dados:
dx = [dx; 0];
dx2 = [dx2; 0; 0];
dx3 = [dx3; 0; 0];
dy = [dy; 0];
dy2 = [dy2; 0; 0];
dy3 = [dy3; 0; 0; 0];
dy4 = [dy4; 0; 0; 0; 0];
disp([x, y, dy, dy2, dy3, dy4]);

px = y(1) + dy(1)*(xk-x(1)) + dy2(1)*(xk-x(1))*(xk-x(2)) +...
dy3(1)*(xk-x(1))*(xk-x(2))*(xk-x(3)) + ...
dy4(1)*(xk-x(1))*(xk-x(2))*(xk-x(3))*(xk-x(4));

/// Lagrange:
P = ones(x); // Produtório - inicializaçªo
N = max(size(x)); // Numero de pontos
for k=1:N
    for n=1:N
        if (abs(n-k)>0) then
            P(k) = P(k)*(xk-x(n))/(x(k)-x(n));
        end;
    end
end
pxL = sum(P.*y); // ponto calculado

disp([fk, pL, pq, px, pxL]);
erros = [pL, pq, px, pxL]-fk;
disp(erros);

xx = 0:0.01:4; 
yy = ff(xx);
subplot(2,1,1); plot(xx,yy,xk,fk,'o');

////////////////// Erro para vários valores:

// Calculando o valor de f(xk):
ve = [];
for xk = 0.1:0.05:4;
fk = ff(xk);

/// Interpolação linear:
pos = 1;
while xk>x(pos)
    pos = pos + 1;
end
pL = y(pos-1) + (y(pos)-y(pos-1))*(xk-x(pos-1))/(x(pos)-x(pos-1));

/// Interpolação quadrática:
p1 = pos;
if pos<2 then
    p1 = pos;
end
if pos>2 then
    p1 = pos-1;
end
p2 = p1+1;
p3 = p2+1;
if p3>max(size(y)) then
    p3 = p3 - 1;
    p2 = p2 - 1;
    p1 = p1 - 1;
end
x12 = (x(p1)-x(p2))
x32 = (x(p3)-x(p2))
M = [x12*x12 x12
     x32*x32 x32];
v = [y(p1)-y(p2)
     y(p3)-y(p2)];
ab = inv(M)*v;
pq = ab(1)*(xk-x(p2))*(xk-x(p2)) + ab(2)*(xk-x(p2)) + y(p2);

// Interpolação de Newton:
// Calculando as diferenças:
dx = diff(x);
dy = diff(y)./dx;
dx2 = x(3:$)-x(1:$-2);
dy2 = diff(dy)./dx2;
dx3 = x(4:$)-x(1:$-3);
dy3 = diff(dy2)./dx3;
dx4 = x(5:$)-x(1:$-4);
dy4 = diff(dy3)./dx4;

// Preparado para mostrar os dados:
dx = [dx; 0];
dx2 = [dx2; 0; 0];
dx3 = [dx3; 0; 0];
dy = [dy; 0];
dy2 = [dy2; 0; 0];
dy3 = [dy3; 0; 0; 0];
dy4 = [dy4; 0; 0; 0; 0];
// disp([x, y, dy, dy2, dy3, dy4]);

px = y(1) + dy(1)*(xk-x(1)) + dy2(1)*(xk-x(1))*(xk-x(2)) +...
dy3(1)*(xk-x(1))*(xk-x(2))*(xk-x(3)) + ...
dy4(1)*(xk-x(1))*(xk-x(2))*(xk-x(3))*(xk-x(4));

/// Lagrange:
P = ones(x); // Produtório - inicializaçao
N = max(size(x)); // Numero de pontos
for k=1:N
    for n=1:N
        if (abs(n-k)>0) then
            P(k) = P(k)*(xk-x(n))/(x(k)-x(n));
        end;
    end
end
pxL = sum(P.*y); // ponto calculado

disp([fk, pL, pq, px, pxL]);
erros = abs([pL, pq, px, pxL]-fk);
ve = [ve; erros];
end;

xk = 0.1:0.05:4
subplot(2,1,2); plot(xk,ve); xgrid;
legend('Erro Linear','E. quadrático','Erro Newton','E. Lagrange');

 
Gráficos: 


 Detalhe do erro:


 

sexta-feira, 13 de março de 2026

Os Principais Métodos Numéricos para Encontrar as Raízes de Equações Reais

 

Os principais métodos numéricos para encontrar as raízes de equações reais, ou seja, resolver equações da forma $f(x) = 0$, são divididos em duas categorias principais: métodos de intervalo (ou de bracketing) e métodos de ponto fixo (ou abertos).

Aqui estão os métodos mais comuns e importantes:

1. Métodos de Intervalo (Bracketing Methods)

Estes métodos exigem que você comece com um intervalo \([a, b]\) onde se sabe que uma raiz existe (ou seja, $f(a)$ e $f(b)$ têm sinais opostos, garantindo que a função cruza o eixo $x$ nesse intervalo, pelo Teorema do Valor Intermediário). Eles sempre convergem se a função for contínua e a condição inicial for satisfeita.

A. Método da Bisseção (Bisection Method)

Este é o método mais simples e robusto. Ele funciona dividindo o intervalo ao meio repetidamente.

Passos:

  1. Comece com um intervalo \([a_0, b_0]\) tal que $f(a_0) \cdot f(b_0) < 0$.
  2. Calcule o ponto médio: $c_n = \frac{a_n + b_n}{2}$.
  3. Se $f(c_n)$ for muito próximo de zero, $c_n$ é a raiz.
  4. Se $f(a_n) \cdot f(c_n) < 0$, a nova raiz está em \([a_n, c_n]\). Defina $a_{n+1} = a_n$ e $b_{n+1} = c_n$.
  5. Se $f(c_n) \cdot f(b_n) < 0$, a nova raiz está em \([c_n, b_n]\). Defina $a_{n+1} = c_n$ e $b_{n+1} = b_n$.
  6. Repita até que o intervalo seja menor que a tolerância desejada.

Vantagem: Convergência garantida.

Desvantagem: Convergência lenta (linear).

2. Métodos Abertos (Open Methods)

Estes métodos usam uma ou mais aproximações iniciais, mas não exigem que a raiz esteja contida em um intervalo inicial. Eles podem convergir muito mais rápido que os métodos de intervalo, mas a convergência não é garantida; eles podem divergir se a estimativa inicial for ruim.

B. Método da Falsa Posição (False Position Method ou Regula Falsi)

Este método é semelhante à bisseção, mas em vez de usar o ponto médio, ele usa a intersecção da linha reta que liga os pontos \((a_n, f(a_n))\) e \((b_n, f(b_n))\) com o eixo $x$ como a próxima aproximação.

Passos:

  1. Comece com um intervalo \([a_n, b_n]\) tal que $f(a_n) \cdot f(b_n) < 0$.
  2. Calcule a próxima aproximação $c_n$ usando a fórmula da secante:
    $$c_n = a_n - \frac{f(a_n)(b_n - a_n)}{f(b_n) - f(a_n)}$$
  3. Atualize o intervalo da mesma forma que na bisseção (mantendo o sinal oposto).

Vantagem: Geralmente converge mais rápido que a bisseção.

Desvantagem: Um dos endpoints pode ficar "preso" se a função for muito côncava ou convexa, o que pode retardar a convergência.

C. Método de Newton-Raphson (Newton's Method)

Este é um dos métodos mais poderosos e rápidos, pois usa informações sobre a derivada da função. Ele usa a linha tangente no ponto atual para estimar onde a função cruza o eixo $x$.

Passos:

  1. Escolha uma estimativa inicial $x_0$.
  2. Calcule a próxima aproximação $x_{n+1}$ usando a fórmula iterativa:
    $$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$
    Onde $f'(x)$ é a primeira derivada de $f(x)$.

Vantagem: Convergência quadrática (muito rápida) se a estimativa inicial estiver próxima da raiz e $f'(x)$ não for zero perto da raiz.

Desvantagem: Requer o cálculo da derivada $f'(x)$. Pode divergir se $f'(x_n) \approx 0$ ou se a estimativa inicial for ruim.

D. Método da Secante (Secant Method)

Este método é uma modificação do Newton-Raphson que evita a necessidade de calcular a derivada explicitamente. Ele usa duas estimativas anteriores para aproximar a derivada (usando a inclinação da secante entre os dois pontos).

Passos:

  1. Escolha duas estimativas iniciais $x_0$ e $x_1$.
  2. Calcule a próxima aproximação $x_{n+1}$ usando a fórmula:
    $$x_{n+1} = x_n - \frac{f(x_n)(x_n - x_{n-1})}{f(x_n) - f(x_{n-1})}$$

Vantagem: Convergência superlinear (mais rápido que a bisseção, mas mais lento que Newton). Não requer a derivada.

Desvantagem: Requer duas estimativas iniciais.

E. Método do Ponto Fixo (Fixed-Point Iteration)

Este método requer que a equação original $f(x) = 0$ seja reescrita na forma $x = g(x)$. A iteração é então dada por $x_{n+1} = g(x_n)$.

Passos:

  1. Reescreva $f(x) = 0$ como $x = g(x)$.
  2. Escolha uma estimativa inicial $x_0$.
  3. Calcule a próxima aproximação: $x_{n+1} = g(x_n)$.

Vantagem: Simples de implementar se a função $g(x)$ for fácil de derivar.

Desvantagem: A convergência só ocorre se, perto da raiz, a magnitude da derivada de $g(x)$ for menor que 1 (ou seja, $|g'(x)| < 1$). A escolha de $g(x)$ é crucial.

Resumo Comparativo

Método Tipo Requer Derivada? Convergência Típica Robustez
Bisseção Intervalo Não Linear (Lenta) Muito Alta (Garantida)
Falsa Posição Intervalo Não Linear (Mais Rápida que Bisseção) Alta
Newton-Raphson Aberto Sim Quadrática (Rápida) Baixa (Sensível ao $x_0$)
Secante Aberto Não Superlinear (Rápida) Média
Ponto Fixo Aberto Não (Requer $g(x)$) Linear Depende da escolha de $g(x)$

A escolha do método depende da precisão necessária, da disponibilidade da derivada da função e da proximidade da estimativa inicial à raiz verdadeira.

Obs: esta postagem foi feita com o auxílio do MathGPT.  

```