3次方程式 $2x^3+10x^2-2x=10$の解をニュートン法で求めてみる。$(x+1)(x-1)(2x+10)=0$とできることから解は3つあるが、ここでは正のものについて、初期値10からスタートしてみることにする。導関数 $6x^2+20x-2$ を利用すると、以下のようなコードを書くことができる。
#include <stdio.h>
#include <math.h>
#define eps 1.0e-15
#define xinit 10.0
double f(double x){
return 2*x*x*x+10.0*x*x-2.0*x-10.0;
}
double fp(double x){
return 6.0*x*x+20.0*x-2.0;
}
int main(void){
double x0, x1, f0, fp0;
x0=xinit;
do {
f0=f(x0);fp0=fp(x0);
x1=x0-f0/fp0;
x0=x1;
printf(" %e %e \n", x0, f0);
}while(fabs(f0)>eps);
printf("answer: %e \n", x0);
}解の収束が悪かったり、似たような値の解が存在する場合などは、少し工夫が必要となる(減速ニュートン法やセカント法と呼ばれるものなど)。