Não encontro o erro no meu método da bisseção, so sei que está dando um resultado errado e ele não esta encontrando a raiz. Se alguem poder ajudar o código está logo abaixo
float condErro;
int iter;
float raiz;
float tolerancia;
float deltaX;
float x = 0;
float fa, fb, fx = 0;
float a, b, c;
int iterMax;
a = Integer.valueOf(JOptionPane.showInputDialog("Informe o valor de A"));
b = Integer.valueOf(JOptionPane.showInputDialog("Informe o valor de B"));
tolerancia = Float.valueOf(JOptionPane.showInputDialog("Informe o valor da tolerância"));
iterMax = Integer.valueOf(JOptionPane.showInputDialog("Informe a quantidade máxma de iterações"));
fa = funcao_da_Bissecao(a);
fb = funcao_da_Bissecao(b);
if(fa*fb>0){
System.out.println("Função não muda de sinal nos extremos do intervalo dado");
}
deltaX = (b-a)/2;
iter = 0;
while(tolerancia > (b-a)){
x = (a+b)/2;
fx = funcao_da_Bissecao(x);
if(deltaX <= tolerancia && Math.abs(fx) <= tolerancia || iter >= iterMax){
break;
}
if(fa*fb > 0){
a = x;
fa = fx;
}else{
b = x;
fb = fx;
}
deltaX = deltaX/2;
iter++;
}
raiz = x;
//Teste de convergência
if (deltaX <= tolerancia && Math.abs(fx) <= tolerancia) {
condErro = 0;
}else{
condErro = 1;
}
System.out.println("Rais: " + raiz);
System.out.println("Iterações: " + iter);
System.out.println("Condição do erro: " + condErro);
}
public static float funcao_da_Bissecao(float x) {
return (float)((0.05 * Math.pow(x, 3)) + (-0.4 * Math.pow(x, 2)) + (3*x * Math.sin(x)));
}