Demo entry 6363311

Bissecção

   

Submitted by anonymous on May 13, 2017 at 03:04
Language: Matlab. Code size: 2.4 kB.

%% Questão 2 %%

% f(x) = 4x^3 - 3x - 0.1e^(-x)

% Usando o método da bissecção, com os pontos iniciais 0,6 e 1.

% Use como critérios de parada um número máximo de 100 iterações e
% |f(x)| < 10^(-6). Apresente os pontos intermediários e erros (|f(x)|)
% obtidos em cada iteração.
%% CONSTANTES %%

a = 0.6;
b = 1;

Lim = 100;
eps = 1e-6;
%% VARIÁVEIS %%

i = 1;

xa = [];
fa = [];
xb = [];
fb = [];
xm = [];
fxm = [];
%% ALGORITMO %%

% Método da Bissecção
xa(i) = a;
xb(i) = b;
fa(i) = 4*xa(i)^3 - 3*xa(i) - 0.1*exp(-xa(i));
fb(i) = 4*xb(i)^3 - 3*xb(i) - 0.1*exp(-xb(i));

if fa * fb > 0                                      % Verifica se existe raiz no intervalo [a, b]
    error('Nao existe raiz entre %d e %d', a, b);
end

while abs(fa(i)) > eps && abs(fb(i)) > eps          % Roda enquanto a magnitude fa e fb forem maiores que a tolerância
    
    xm(i) = (xa(i) + xb(i)) / 2;                    % Acha o novo ponto intermediário xm da i-ésima iteração com a fórmula do metodo da bissecção
    fxm(i) = 4*xm(i)^3 - 3*xm(i) - 0.1*exp(-xm(i)); % Calcula fxm da i-ésima iteração 
    
    if fa(i) * fxm(i) < 0                           % Se fa * fxm < 0 substituimos b pelo ponto intermediário xm,
        xa(i+1) = xa(i);                            % fb vira fxm e a e fa continuam iguais para próxima iteração
        fa(i+1) = fa(i);
        xb(i+1) = xm(i);
        fb(i+1) = fxm(i);
    else                                            % Se fb * fxm < 0 substituimos a pelo ponto intermediário xm,
        xa(i+1) = xm(i);                            % fa vira fxm e b e fb continuam iguais para próxima iteração
        fa(i+1) = fxm(i);
        xb(i+1) = xb(i);
        fb(i+1) = fb(i);
    end
    
    if i >= Lim                                     % Se o número de iterações passar do limite, emite o erro
        error('%d iterações sem convergência', Lim)
    end
    i = i + 1;                                      % Conta o número de iterações
    
end

if abs(fa(i)) < eps                                 % Se fa é menor que a tolerância então a solução convergida é x = a                           
    x = xa(i);
elseif abs(fb(i)) < eps                             % Se fb é menor que a tolerância então a solução convergida é x = b
    x = xb(i);
end

%% SOLUÇÃO %%

x    % Solução Convergida
fxm  % Erros de Iteração
xm   % Pontos Intermediários

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).