Molezinha...
lá vai:
#include
#include
#define ERROR_THRESHOLD 0.0001
double function(double x) {
// Defina aqui a função cuja raiz deseja encontrar
// Exemplo: return x*x - 4;
return /* Defina a função */;
}
double bisection(double a, double b) {
double mid, fmid;
int iterations = 0;
do {
mid = (a + b) / 2.0;
fmid = function(mid);
if (fmid == 0.0 || (b - a) / 2.0 < ERROR_THRESHOLD) {
break; // Raiz encontrada ou erro suficientemente pequeno
}
if (function(a) * fmid < 0) {
b = mid;
} else {
a = mid;
}
iterations++;
} while (iterations < 1000); // limite de iterações para evitar loop infinito
return mid;
}
int main() {
double root1, root2;
double interval1_a, interval1_b;
double interval2_a, interval2_b;
// Defina os intervalos para encontrar as raízes
interval1_a = /* Defina o limite inferior */;
interval1_b = /* Defina o limite superior */;
interval2_a = /* Defina o limite inferior */;
interval2_b = /* Defina o limite superior */;
root1 = bisection(interval1_a, interval1_b);
root2 = bisection(interval2_a, interval2_b);
printf("Primeira raiz: %.4lf\n", root1);
printf("Segunda raiz: %.4lf\n", root2);
return 0;
}
Motivo da escolha: O método da bissecção é um dos métodos mais simples e robustos para encontrar raízes de equações. Ele é baseado no Teorema do Valor Intermediário e garante a convergência para a raiz, desde que a função seja contínua em um intervalo [a, b] e os valores da função em a e b tenham sinais opostos. Além disso, não requer a derivada da função, o que pode ser uma vantagem em alguns casos.
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar