Instruções
Implementar o Método da Bissecção
O método da bissecção, também conhecido como método de busca binária, utiliza uma busca binária para encontrar as raízes de uma função de valor real. Funciona restringindo um intervalo onde a raiz quadrada se encontra até que converja para um valor dentro de uma tolerância especificada.
Por exemplo, se a tolerância for
0.01, o método da bissecção continuará dividindo o intervalo pela metade até que a diferença entre os limites superior e inferior seja menor ou igual a 0.01.
Neste laboratório, você implementará uma função que utiliza o método da bissecção para encontrar a raiz quadrada de um número.
Objetivo: Cumprir as user stories abaixo e fazer todos os testes passarem para completar o laboratório.
Histórias de Usuário:
1. Você deve definir uma função chamada square_root_bisection com três parâmetros:
- O número para o qual você deseja encontrar a raiz quadrada.
- A tolerância é a margem de erro aceitável para o resultado. Você deve definir um valor padrão para a tolerância.
- O número máximo de iterações a serem realizadas. Você deve definir um número padrão de iterações.
square_root_bisection deve:
- Levante um
ValueErrorcom a mensagemSquare root of negative number is not defined in real numbersse o número passado para a função for negativo. - Para os números
0e1, imprima a mensagem:The square root of [number] is [number]e retorne o próprio número como a raiz quadrada. - Para qualquer outro número positivo, imprima a raiz quadrada aproximada com a mensagem:
The square root of [square_target] is approximately [root]e retorne o valor da raiz calculada. - Se nenhum valor atender à condição de tolerância, imprima uma mensagem de falha:
Failed to converge within [maximum] iterationse retorneNone.
O que fazer:
Testes:
- Você não deve importar nenhum módulo.
- Você deve ter uma função chamada `square_root_bisection`.
- Sua função `square_root_bisection` deve ter três parâmetros.
- Você deve definir um valor padrão para a **tolerância** e o número máximo de iterações.
- Sua função `square_root_bisection` deve lançar um `ValueError` com a mensagem `Raiz quadrada de número negativo não está definida nos números reais` quando o número passado para a função for negativo.
- `square_root_bisection(0)` deve retornar `0`.
- `square_root_bisection(0)` deve imprimir `A raiz quadrada de 0 é 0`.
- `square_root_bisection(0.001, 1e-7, 50)` deve retornar um número entre `0.03162267660168379` e `0.031622876601683794`.
- `square_root_bisection(0.001, 1e-7, 50)` deve imprimir `A raiz quadrada de 0.001 é aproximadamente X`, onde `X` é um número entre `0.03162267660168379` e `0.031622876601683794`.
- `square_root_bisection(0.25, 1e-7, 50)` deve retornar um número entre `0.4999999` e `0.5000001`.
- `square_root_bisection(0.25, 1e-7, 50)` deve imprimir `A raiz quadrada de 0.25 é aproximadamente X`, onde `X` é um número entre `0.4999999` e `0.5000001`.
- `square_root_bisection(1)` deve retornar `1`.
- `square_root_bisection(1)` deve imprimir `A raiz quadrada de 1 é 1`.
- `square_root_bisection(81, 1e-3, 50)` deve retornar um número entre `8.999` e `9.001`.
- `square_root_bisection(81, 1e-3, 50)` deve imprimir `A raiz quadrada de 81 é aproximadamente X`, onde `X` é um número entre `8.999` e `9.001`.
- `square_root_bisection(225, 1e-3, 100)` deve retornar um número entre `14.999` e `15.001`.
- `square_root_bisection(225, 1e-3, 100)` deve imprimir `A raiz quadrada de 225 é aproximadamente X`, onde `X` é um número entre `14.999` e `15.001`.
- `square_root_bisection(225, 1e-5, 100)` deve retornar um número entre `14.99999` e `15.00001`.
- `square_root_bisection(225, 1e-5, 100)` deve imprimir `A raiz quadrada de 225 é aproximadamente X`, onde `X` é um número entre `14.99999` e `15.00001`.
- `square_root_bisection(225, 1e-7, 100)` deve retornar um número entre `14.9999999` e `15.0000001`.
- `square_root_bisection(225, 1e-7, 100)` deve imprimir `A raiz quadrada de 225 é aproximadamente X`, onde `X` é um número entre `14.9999999` e `15.0000001`.
- `square_root_bisection(225, 1e-7, 10)` deve retornar `None`.
- `square_root_bisection(225, 1e-7, 10)` deve imprimir `Falha ao convergir dentro de 10 iterações`.
Preview