alguem sabe como poderia implementar um metodo , parara calcular a raiz cubica
pelo metodo de bolzano? ou seja sem usar o metodo Math. ou seja de maneira
que dado uma aproximação por construtor, fazer o calculo. por ex
class Raizes1{
double _epsilon;
double _atual = 0;
public Raizes1(double epsilon){
_epsilon = epsilon;
}
public double raizCubica(double numero){
//aqui ele fazer o calculo pelo metodo de bolzano
}
}
Cara ta faltando matemática!!!
a raiz de um número é igual ao número cm expoente 1/x onde x é o radical por exemplo:
raiz quadrada de 9 é igual a 9 elevado a 1/2
raiz cúbica de 9 é igual a 9 elevado a 1/3
então robson, isso eu to ligado, conheço sim essas partes do calculo da raiz, mas naum conheço o metodo de bolzano, quer dizer sei mais ou menos como funciona, o problema é trasfomalo em código, dado um numero ele faz de maneira interativa, ou seja utilizando o valor anterior calculado, ate que a precisão do calculo solicitado seja satisfeita, no caso a precisão seria o epsilon dado no contrutor!
Hum então vc quer implementar o teorema de bolzano, qual exatamente a dificuldade ? vc travou em que ponto?
então robson ,naum se vc conhece esse metodo.
Suponha que desejamos extrair a raiz cubica de um numero real x > 0. Escolhe-se como
estimativa inicial para raiz cubica de x, o numero r0 = (a0+b0)/2, sendo a0 o maior inteiro tal que a ao cubo<= x e b0 = a0 + 1. Calcula-se a seguinte sequencia de numeros: rn= (an +bn)/2, onde a(n+1) = rn e b(n+1) = bn
se rn ao cubo <= x
se rn ao cubo > x: a(n+1) = an e b(n+1) = rn.
ai esse processo é repetido enquanto|rn ao cubo - x| > epsilon! a minha duvida é de como vou utilizar esses an e bn!! espero ter sido claro!
tentei fazer esse metodo, mas esta dando looping alguem pode me ajudar?
public double raizCubica(double numero){
double anterior = numero;
double _atual = (_a0 + _b0)/2;
if((numero > 0) && (_epsilon > 0) &&(_epsilon <1)){
while((absoluto(_a0*_a0*_a0)- anterior)<= _epsilon){
if(_atual*_atual*_atual <= numero){
_a0 = _atual;
_b0 = _b0;
_atual = (_a0 + _b0)/2;
}
else if(_atual*_atual*_atual > numero){
_a0 = _a0;
_b0 = _atual;
_atual = (_a0 + _b0)/2;
}
else{
System.out.print("erro!");
}
}
}
Leia este programa e veja o que você pode fazer.
class RaizCubica {
private static double EPSILON = 1E-8;
private static boolean enough (double r, double x, double epsilon) {
return Math.abs ((r * r * r - x) / x) < epsilon;
}
public static double raizCubica (double x) {
// Como é difícil obter a0 e b0 de acordo com o algoritmo, vamos simplesmente considerar a0 = 0, e b0 = n.
// Isso faz com que o algoritmo demore mais para convergir, mas para nossos efeitos isso é suficiente.
if (x == 0) return 0;
if (x < 0) return -raizCubica (-x);
if (Math.abs (x) < 1.0) return 1.0 / raizCubica (1.0 / x);
double a = 0;
double b = x;
double r = (a + b) / 2;
while (!enough (r, x, EPSILON)) {
// System.out.printf ("a=%f, b=%f, r=%f%n", a, b, r);
if (r * r * r <= x) {
a = r;
} else {
b = r;
}
r = (a + b) / 2;
}
return r;
}
public static void main (String[] args) {
double[] teste = {
0.0,
1.0,
-1.0,
Math.pow (0.2, 3),
Math.PI,
Math.E,
Math.pow (123456789.0, 3),
Math.pow (98765.4321, 3),
Math.pow (77777777777.0, 3)
};
for (double t: teste) {
System.out.printf ("%g: %g - %g%n", t, raizCubica (t), Math.cbrt (t));
}
}
}
então entanglement, é que gostaria de implementalo de maneira interativa mesmo, sem usar a função Math,
sera que vc poderia me dar um help, eu entendi uma parte sim do que vc fez, mas queria realmente sem o auxilio do Math, eu sei que facilita, mas queria trainar mais minha lógica, eu consegui fazer o daraiz quadrada com o metodo de newton, acho que ate postei aqui, agora queria fazer o da raiz cubica com o metodo de bolzano!
Ta chegando einh…rsrsrs…quinta - feira…
[quote=rodsoliver]então entanglement, é que gostaria de implementalo de maneira interativa mesmo, sem usar a função Math,
sera que vc poderia me dar um help, eu entendi uma parte sim do que vc fez, mas queria realmente sem o auxilio do Math, eu sei que facilita, mas queria trainar mais minha lógica, eu consegui fazer o daraiz quadrada com o metodo de newton, acho que ate postei aqui, agora queria fazer o da raiz cubica com o metodo de bolzano! [/quote]
Rode meu programa passo-a-passo, e troque Math.abs pela sua função “absoluto”. Entenda por que é que seu programa não deu certo.