Ho scritto un programma che applica il metodo di newton, con la derivata approssimata dal rapporto incrementale per trovare una soluzione all'equazione f(x)=0 della seguente funzione
f(x)=x^3-7x^2-4x+12+10cos(x)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/*definisco lo scarto per approssimare meglio la derivata*/
#define delta 0.1
/*definisco la funzione f di cui calcolo lo zero*/
double f (double x)
{
return x*x*x-7*x*x-4*x+12+10*cos(x);
}
/*definisco funzione che mi permette di fare l'iterazione secondo il metodo di newton*/
double passo(double x)
{
return x-f(x)*delta/(f(x)-f(x-delta));
}
int main (void)
{
double x1;
double x2;
double epsilon;
int i;
i=1;
scanf("%f",&x1);
scanf("%f",&epsilon);
x2=passo(x1);
printf("x_%d=%f, x_%d-x_%d=%f\n",i,x2,i,i-1,x2-x1);
while(fabs(x2-x1)>= epsilon)
{
i++;
x1=x2;
x2=passo(x1);
printf("x_%d=%f, x_%d-x_%d=%f\n",i,x2,i,i-1,x2-x1);
}
printf("iterazioni svolte:%d\n",i);
scanf("%f",&x1);
exit(EXIT_SUCCESS);
}
lo eseguo ma non ottengo il risultato sperato in pratica al posto del risultato viene scritto #INDOO. dove sbaglio?