Faça um algoritmo no Freemat para determinar uma aproximação para a raiz quadrada de um número entre 0 e 10000, informado pelo usuário, utilizando o método da bissecção com apenas um critério de parada, amplitude do intervalo, que contém a solução, ficar menor que a precisão informada, o intervalo inicial deve ser [0,100].

Passo 1

Beleza, o exercício pede pra gente criar um algoritmo no FreeMat que aproxime a raiz quadrada de um número usando o método da bissecção. O intervalo inicial é (porque ) e a gente para quando a largura do intervalo ficar menor que a precisão que o usuário informar. O conteúdo aqui é Métodos Numéricos – especificamente, o método da bissecção – e vamos precisar entender como dividir o intervalo ao meio e testar qual metade contém a raiz.

Passo 2

Primeiro, a gente lê do usuário o número m = a + b2 e a precisão , e define os extremos do nosso intervalo:
a = 0;
b = 100;
A ideia é que, a cada iteração, a gente calcule o ponto médio
e veja se é maior ou menor que . Isso é o core do método da bissecção.

Passo 3

Na teoria da bissecção, em cada passo a gente testa:
– se , significa que está entre e , então faz ;
– senão, está entre e , então faz .
Isso garante que a cada iteração o intervalo que contém a raiz fica pela metade.

Passo 4

O critério de parada é simplesmente quando a largura do intervalo for menor que . Ou seja, a gente repete:
while
…dividir ao meio e ajustar ou
end
Quando sair do loop, o intervalo está tão pequenininho que qualquer ponto dentro dele é uma boa aproximação.

Passo 5

Por fim, a gente pode tomar como valor aproximado da raiz do raiz approx m = a + b2 o ponto médio final
Isso faz sentido porque é o “meio” do menor intervalo que ainda contém a solução.

Resposta

% Leitura dos dados
x = input('Digite um número entre 0 e 10000: ');
while x < 0 | x > 10000
    x = input('Valor inválido! Entre 0 e 10000: ');
end
eps = input('Digite a precisão desejada: ');

% Intervalo inicial
a = 0;
b = 100;

% Método da bissecção
while (b - a) > eps
    m = (a + b) / 2;        % ponto médio
    if m^2 > x
        b = m;              % raiz está em [a, m]
    else
        a = m;              % raiz está em [m, b]
    end
end

% Aproximação final
raiz = (a + b) / 2;
disp(['Aproximação de sqrt(', num2str(x), ') = ', num2str(raiz)]);

Exercícios relacionados