نیوتن
#include
#include
#include
#include
#include
#define retf(x) sin(x)
#define FALSE 0
#define TRUE 1
unsigned char chk_error=FALSE;
void main(void)
{
double nioton_solve(double,double);
double accuracy,p0,answer;
clrscr();
printf("Enter Accuracy For Solving Sin(x)=0: \0");
cin>>accuracy;
printf("Enter Start Point P0:\0");
cin>>p0;
answer=nioton_solve(accuracy,p0);
if(chk_error)
printf("Error In calculation.\a\n\0");
else
{
printf("Answer Of sin(x)=0 With Nioton Method And start Point= \0");
printf("&f\n\0",answer);
}
}
double d1x(double xi)
{
double h=0.00001;
double yi_1=retf(xi);
return((retf(xi+h)-yi_1)/h);
}
double d2x(double xi)
{
double h=0.00001;
double yi_1=retf(xi);
return((retf(xi-h)-2*yi_1+retf(xi+h))/(h*h));
}
double nioton_solve(double accuracy,double p0)
{
double y0=retf(p0),df,d2f,dp,p1,y1,relerror;
unsigned int max =99,cmax=1;
do
{
df=d1x(p0);
if(df==0)
{
chk_error=TRUE;
return(-1);
}
else
dp=y0/df;
p1=p0-dp;
y1=retf(p1);
relerror=2*fabs(dp)/(fabs(p1)+accuracy);
if ((relerror
p0=p1;
y0=y1;
cmax++;
}while (cmax<=max);
return (p0);
}