Método da Bissecção (MATLAB)

Criar um algoritmo em Matlab, usando o método da bisseção, que ao digitar uma função f(x) = x^3 - 6*x^2 + 4*x + 12, e ao digitar o intervalo [a;b] na caixa de entrada, e se f(a)*f(b) < 0, termos uma raiz nesse intervalo, caso contrário será enviada uma mensagem, que não existe raiz nesse intervalo, e o algoritmo pedirá um novo intervalo. Se tudo correr bem forneça numa tabela as cinco primeiras iterações.


O método da bisseção é um método numérico para encontrar a raiz de uma função polinomial. Ele funciona dividindo o intervalo ao meio e selecionando um subintervalo em que a raiz deve estar. A solução é alcançada interativamente, reduzindo os valores após o palpite, que envolve a solução real.

Uma das vantagens desse método da bisseção é que ele sempre converge para a solução. No entanto, a taxa de convergência pode ser lenta.  Além disso, escolher um palpite mais próximo à raiz não tem vantagem.

O método da bisseção pode ser útil em situações que outros métodos mais rápidos como o método de Newton-Raphson, não são aplicáveis ou requerem uma estimativa inicial. É importante notar que nenhum método é o melhor e cada um tem suas desvantagens. É frequentemente o caso de outro método pode ser usado para neutralizar a desvantagem.


ALGORITMO


% Define the function to find the root of
f = @(x) x^3 - 6*x^2 + 4*x + 12;

% Set the tolerance
tol = 1e-6;

% Prompt the user to enter the interval [a,b]
a = input('Enter the value of a: ');
b = input('Enter the value of b: ');

% Check if f(a)*f(b) < 0
if f(a)*f(b) < 0
    % Calculate the first five iterations of the bisection method
    iter = 0;
    fprintf('iter      a          b          c          f(c)\n')
    while iter < 5
        c = (a+b)/2;
        fprintf('%2d %10.6f %10.6f %10.6f %10.6f\n', iter, a, b, c, f(c))
        if f(c) == 0 || (b-a)/2 < tol
            break
        end
        iter = iter + 1;
        if sign(f(c)) == sign(f(a))
            a = c;
        else
            b = c;
        end
    end
else
    % Display message and prompt user to enter new interval
    disp('There is no root in this interval. Please enter a new interval.')
end

SOLUÇÃO

Intervalo [2;3]
Enter the value of a: 2
Enter the value of b: 3
iter      a          b     c (raiz)     f(c)
 0   2.000000   3.000000   2.500000   0.125000
 1   2.500000   3.000000   2.750000  -1.578125
 2   2.500000   2.750000   2.625000  -0.755859
 3   2.500000   2.625000   2.562500  -0.322021

GRÁFICO




SOLUÇÃO

Intervalo [4;5]
Enter the value of a: 4
Enter the value of b: 5

iter      a          b      c (raiz)    f(c)
 0   4.000000   5.000000   4.500000  -0.375000
 1   4.500000   5.000000   4.750000   2.796875
 2   4.500000   4.750000   4.625000   1.087891
 3   4.500000   4.625000   4.562500   0.326416
 4   4.500000   4.562500   4.531250  -0.031708

SOLUÇÃO

Intervalo [-2;-1]
Enter the value of a: -2
Enter the value of b: -1

iter      a          b      c (raiz)    f(c)
 0  -2.000000  -1.000000  -1.500000 -10.875000
 1  -1.500000  -1.000000  -1.250000  -4.328125
 2  -1.250000  -1.000000  -1.125000  -1.517578
 3  -1.125000  -1.000000  -1.062500  -0.222900
 4  -1.062500  -1.000000  -1.031250   0.397430

SOLUÇÃO

Intervalo [1;2]
Enter the value of a: 1
Enter the value of b: 2
Não existe raiz nesse intervalo.








Postar um comentário

Postagem Anterior Próxima Postagem