#include <stdio.h>
double func(double x);
/*=============================================================*/
/* main function */
/*=============================================================*/
int main(){
double eps=1e-15; /* precision of calculation */
double a, b, c;
double test;
char temp;
int i=0;
do{
printf("\ninitial value a = "
);
scanf("%lf%c"
, &a, &temp);
printf("initial value b = "
);
scanf("%lf%c"
, &b, &temp);
test=func(a)*func(b);
if(test >= 0){
printf(" bad initial value !! f(a)*f(b)>0\n\n"
);
}
}while(test >= 0);
if(b-a<0){
c=a;
a=b;
b=c;
}
while(b-a>eps){
c=(a+b)/2;
if(func(c)*func(a)<0){
b=c;
}else{
a=c;
}
i++;
printf(" %d\t%20.15f\n"
,i,c);
}
printf("\nsolution x = %20.15f\n\n"
,c);
return(0);
}
/*=============================================================*/
/* define function */
/*=============================================================*/
double func(double x){
double y;
y=x*x*x-3*x*x+9*x-8;
return(y);
}
#include <stdio.h>
#include <math.h>
#define IMAX 50
double func(double x);
double dfunc(double x);
/*================================================================*/
/* main function */
/*================================================================*/
int main(){
double eps=1e-15; /* precision of calculation */
double x[IMAX+10];
char temp;
int i=-1;
printf("\ninitial value x0 = "
);
scanf("%lf%c"
, &x[0], &temp);
do{
i++;
x[i+1]=x[i]-func(x[i])/dfunc(x[i]);
printf(" %d\t%e\n"
, i, x[i+1]);
if(fabs((x[i+1]-x[i])/x[i])<eps) break;
}while(i<=IMAX);
if(i>=IMAX){
printf("\n not converged !!! \n\n"
);
}else{
printf("\niteration = %d solution x = %20.15f\n\n"
,i,x[i+1]);
}
return(0);
}
/*================================================================*/
/* define function */
/*================================================================*/
double func(double x){
double y;
y=x*x*x-3*x*x+9*x-8;
return(y);
}
/*================================================================*/
/* define derived function */
/*================================================================*/
double dfunc(double x){
double dydx;
dydx=3*x*x-6*x+9;
return(dydx);
}
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年9月10日