-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNewton.java
More file actions
129 lines (107 loc) · 3.57 KB
/
Newton.java
File metadata and controls
129 lines (107 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
Nombre: Ana Laura Madrigal García
Matrícula: 1902563A
Programa: Este programa, obtiene un polinomio (introducido por el usuario), su derivada, además que se le pide al usuario ingresar
un valor inicial de la función dada, para poder así aproximar sus raíces a través del método de Newton.
*/
import java.util.Scanner;
public class Newton {
public static void main(String[] args) {
int grado;
Scanner entrada= new Scanner(System.in);
System.out.println("¡Hola! este programa escribirá un polinomio del grado que indiques, y con los coeficientes que gustes, además calcuará su primera derivada uwu");
System.out.println("Inserte el grado del polinomio:");
grado= entrada.nextInt();
int [] polinomio= new int [grado+1];
for(int i=0; i<grado+1 ; i++){
System.out.println("Inserte el coeficiente del monomio de grado "+(i)+ ":");
polinomio[i]= entrada.nextInt();
}
System.out.println("Tu polonomio de grado "+grado+" es:");
System.out.print("f(x) = ");
for(int i=0; i<polinomio.length; i++){
if(i==0&&polinomio[i]!=0) System.out.print(polinomio[i]+" "); //término independiente
else if(i==1&&polinomio[i]!=0){ //término lineal
if(polinomio[i]>0&&polinomio[i-1]!=0) System.out.print("+ "); //excepciones para que se imprima correctamente el polinomio
if(polinomio[i]==1) System.out.print(" x ");
if(polinomio[i]==-1) System.out.print("- x ");
else if(polinomio[i]!=0&&polinomio[i]!=1){
System.out.print(" "+polinomio[i]+"x ");
}
}
else{ //demás términos
if(polinomio[i]==1) System.out.print("+ x^"+(i)+" ");
else if(polinomio[i]==-1) System.out.print("- x^"+(i)+" ");
else if(polinomio[i]!=0){
if(polinomio[i]>0) System.out.print("+ ");
System.out.print(" "+polinomio[i]+"x^"+(i)+" ");
}
}
}
System.out.println(" ");
System.out.println("La derivada de tu polinomio es: ");
System.out.print("f'(x)= "); //primera derivada
for(int i=0; i<polinomio.length; i++){
if(i==0) System.out.print("");
else if(i==1&&polinomio[i]!=0) System.out.print((i)*polinomio[i]+" ");
else if(i==2&&polinomio[i]!=0){
if(polinomio[i]>0&&polinomio[i-1]!=0) System.out.print("+ ");
System.out.print((i)*polinomio[i]+"x ");
}
else if(polinomio[i]!=0){
if(polinomio[i]>0) System.out.print("+ ");
System.out.print(" "+(i)*polinomio[i]+"x^"+(i-1)+" ");
}
}
//Método de Newton
double x, xn;
System.out.println("");
System.out.println("Ingrese el valor inicial en x(0):");
xn= entrada.nextDouble();
double poli=0;
double deri=0;
double epsilon=0.000001;
for(int i=0; i<= 100; i++){
x=xn;
poli=eval(polinomio,xn);
deri=deval(polinomio,xn);
xn= x - ((poli)/(deri));
System.out.println("x("+i+") =" +xn);
System.out.println(poli);
double diff_rel=Math.abs((xn-x)/xn);
if(diff_rel<=epsilon) break;
}
}
static double eval(int[] polinomio, double xn){
double poli=0;
double aux=1;
for(int k=0; k<polinomio.length; k++){ //polinomio siendo evaluado
if(k==0) poli+= polinomio[0];
else if(k==1) poli += polinomio[k]*xn;
else{
for(int j=1;j<=k; j++){
aux*=polinomio[k]*xn;
}
poli+= aux;
aux=1;
}
}
return poli;
}
static double deval(int[] polinomio, double xn){
double deri=0;
double aux=1;
for(int k=0; k<polinomio.length; k++){ //derivada siendo evaluada
if(k==0) deri+= 0;
else if(k==1) deri += polinomio[k];
else{
for(int j=1;j<=k-1; j++){
aux*=polinomio[k]*xn;
}
deri+= k*aux;
aux=1;
}
}
return deri;
}
}