/* < newton.c > */
#include "smp.h"
main()
{
void USERF(double *,double *,double);
double x0,e;
int n,NMAX;
/*** ステップ1 データの入力 ***/
printf("\n初期値 x0 = ");
scanf("%1f",&x0);
printf("\n収束判別定数 p = ");
scanf("%1f",&e);
printf("\n最大反復回数 NMAX = ");
scanf("%d",&NMAX);
/*** ステップ2 ニュートン・ラプソン法の計算 ***/
S_NEWT(&n,&x0,e,NMAX,USERF);
/*** ステップ3 計算結果の出力 ***/
printf("\n反復回数:N=%d 解:X(N)=%10.71e",n,x0);
}
/* < ニュートン・ラプソン法の関数 > */
void S_NEWT(int *n,double *x0,double e,int NMAX,double (*FUNC)())
/* n : スカラー 反復回数 (Out)
x0 : スカラー 初期値(解) (In/Out)
e : スカラー 収束判別定数 (In)
NMAX : スカラー 最大反復回数 (In)
FUNC : ユーザ定義関数 (In) */
{
double fun,dfun,xn,ans;
for(*n=0,xn=*x0;*n<NMAX;){
(*FUNC)(&fun,&dfun,xn);
*x0=xn-fun/dfun;
if(fabs(xn-*x0)>e)
xn=*x0;
else
break;
}
}
/* <ユーザ定義の関数とその微分の関数 > */
void USERF(double *fn,double *dfn,double x)
/* fn : スカラー 方程式 (Out)
dfn : スカラー 方程式の微分 (Out)
x : スカラー 入力値 (In) */
{
double x2;
x2=x*x;
*fn=x2*x-1.0;
*dfn=3.0*x2;
return;
}
I dont know where is the problem, anyone see anything ?
sorry for the japanese language