Olá pessoal, boa noite!
Estou estudando Cálculo Numérico, e estou aqui tentando fazer um algoritmo para fazer o calculo de aproximação de raízes, utilizando o método de Newton-Raphson.
Para tal, é necessário fazer várias iterações ( Xo…Xn), portanto, preciso utilizar casas decimais. Eu declarei uma variável double, mas está estourando. Eu preciso apenas utilizar os 5 primeiros números, alguém poderia me informar que método utilizar, queria fazer algo melhor do que ter que converter variável para String e realizar o tratamento.
Eu utilizei um substring(); porém não funciona para substring(0,6) pois em alguma itereção dá problema:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.substring(String.java:1934)
at javaapplication3.Main.main(Main.java:28)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
package javaapplication3;
public class Main {
public static void main(String[] args) {
Double fx, fxd, xx;
Double xo, xod;
String v1, v2, a, b;
xo = - 0.5;
xod = - 0.5;
for(int i = 0; i <= 5; i++) {
//calculo da f(x)
fx = 4*(Math.pow(xo,5)) - 7*(Math.pow(xo,2)) + 2;
v1 = fx.toString();
a = v1.substring(0, 4); //pegando apenas 4 casas decimais
xo = fx.valueOf(a);
//calculo da f'(x)
fxd = 20*(Math.pow(xod,4)) - 14*xod;
v2 = fxd.toString();
if(v2.length()>4) {
b = v2.substring(0, 5);
xod = fxd.valueOf(b);
} else xod = fxd.valueOf(v2);
//calculo x+1
xx = xo - (xo/xod);
System.out.println("i: " + i + " | Xi: " + xo + " | f(xi): " + fx + " | f`(x1): " + fxd + " | x+1: " + xx);
}
}
}
CONSOLE:
run:
i: 0 | Xi: 0.12 | f(xi): 0.125 | f(x1): 8.25 | x+1: 0.10545454545454545 i: 1 | Xi: 1.89 | f(xi): 1.8992995328 | f
(x1): 92534.578125 | x+1: 1.8899795750751074
i: 2 | Xi: 73.4 | f(xi): 73.46013197959998 | f(x1): 1.466342220963875E21 | x+1: 23.331787175989085 i: 3 | Xi: 8.52 | f(xi): 8.521937977536963E9 | f
(x1): 71.85343024672 | x+1: 8.401419624217118
i: 4 | Xi: 1790.0 | f(xi): 179073.86634721278 | f(x1): 5.3301111547012484E8 | x+1: 1454.1651031894935 i: 5 | Xi: 7.35 | f(xi): 7.3506398737171296E16 | f
(x1): 16066.6919842 | x+1: 7.3495425121374325
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)