Pesquisa a respeito do Método da Secante e crie uma função no Matlab para determinar a raiz de função por este método.

Passo 1

Então, o exercício pede pra gente pesquisar o Método da Secante e criar uma função no Matlab que ache a raiz de uma função usando esse método. Isso cai em Técnicas de Resolução Numérica de Equações Não Lineares. Pra resolver a gente vai precisar:
  • Entender a ideia do método da secante (aproximação da derivada pela diferença finita).
  • Saber escrever funções em Matlab e usar loops para iterar até a tolerância desejada.

Passo 2

Bora entender a teoria: o Método da Secante gera uma sequência de valores f'(xn)approxf(xn)-f(xn-1)xn - xn-1 que converge para a raiz de xn+1 = xn ;-; f(xn),xn - xn-1f(xn)-f(xn-1) . Ao invés de usar a derivada (como no Newton), a gente aproxima a derivada por:
Daí a fórmula de iteração fica
A gente precisa de dois chutes iniciais e , uma tolerância pra parar o loop, e um número máximo de iterações .

Passo 3

Agora, o algoritmo em alto nível:
  1. Definir x2 = x1 - f(x1),x1 - x0f(x1)-f(x0) e .
  2. Calcular e .
  3. Para até :
    a) Calcular b) Se , interrompe e retorna .
    c) Atualiza , e .
  4. Se passar de , avisa que não convergiu.

Resposta

function [root, iter] = secante(func, x0, x1, tol, maxiter)
% SECANTE Encontra raiz de f(x)=0 pelo Método da Secante
%   [root, iter] = secante(func, x0, x1, tol, maxiter)
%   func     - handle da função (ex: @(x) x^2-2)
%   x0, x1   - chutes iniciais
%   tol      - tolerância de convergência
%   maxiter  - número máximo de iterações
%
%   root     - estimativa da raiz
%   iter     - número de iterações usadas

f0 = func(x0);
f1 = func(x1);

for iter = 1:maxiter
    % calcular novo ponto pela fórmula da secante
    x2 = x1 - f1*(x1 - x0)/(f1 - f0);
    
    % checar convergência
    if abs(x2 - x1) < tol
        root = x2;
        return
    end
    
    % atualizar valores para próxima iteração
    x0 = x1;   f0 = f1;
    x1 = x2;   f1 = func(x1);
end

% se chegar aqui, não convergiu no maxiter
warning('Método da Secante não convergiu em %d iterações.', maxiter);
root = x2;
end

Exercícios relacionados