-
Notifications
You must be signed in to change notification settings - Fork 0
/
Teorema de Newton .final
64 lines (52 loc) · 1.53 KB
/
Teorema de Newton .final
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
float Fp1(float x0,float p1[],int g){//calcula o f de p1
int i;
float soma=0;
for(i=g;i>=0;i--){
soma = soma + p1[i]*(pow(x0,i));
}
return soma;
}
float Fderivada(float x0,float p1[],int g){//calcula o f da derivada de p1
int i;
float soma=0;
float derivada[10];
for(i=g;i>0;i--){//calculo da derivada
derivada[i]=p1[i]*i;
}
for(i=g;i>0;i--){
soma = soma + (derivada[i]*(pow(x0,i-1)));
} return soma;
}
int main(){
float p1[10];
float n; //número dos coeficientes;
int i,j; //contadores
int g; //grau do polinômio que será escaneado para determinar o tamanho do vetor;
float x0; //uma raiz hipotético
float x0a// pega o valor anterior da raiz para comparar ;
printf("Qual o grau do polinomio que deseja: ",g);
scanf("%d",&g);
for(i=g;i>=0;i--){
printf("Digite o coeficiente do termo de indice %d: ",i,n);
scanf("%f",&n);
p1[i]=n;
}
printf(". Utilizando o limite superior do intervalo onde se encontram as raizes positivas ,determine uma aproximação inicial para x0: ", x0 );
scanf("%f",&x0);
/*Fp1(x0,p1,g);
Fderivada(x0,p1,g);
*/
for(i=0;i<1000;i++){
x0a = x0; //pega o valor anterior
x0 = x0 + (Fp1(x0,p1,g)/Fderivada(x0,p1,g));
if(x0-x0a < pow(10,-8)){//comparando se a direrença entre elas é menor que 10^-8
printf("%f",x0);
printf("%d",i);//número de interações
i = 999; //Forcei o "i" a assumir o valor de 999, para quando sair do laço "if " ele poder sair do laço "for";
}
}
return 0;
}