#include "stdio.h"
#include <math.h>
/* f(x) */
double f(double x)
{
return pow(x,2) - 2;
}
/* f(x)の導関数 */
double g(double x)
{
return 2 * x;
}
int main()
{
double x;
double new_x;
double delta;
int i;
int ch;
/* 初期値 */
x = 10;
/* 収束判定のための delta 値 */
delta = 0.000001;
printf("繰り返し回数¥tnew_x¥t¥tf(x)¥t¥tg(x)¥n");
/* for ... になっているのは 100 回繰り返しても収束しなかったら計算を終わりたいから */
for(i = 0 ; i < 100 ; i++) {
new_x = x - f(x) / g(x);
printf("%2d¥t¥t%lf¥t%lf¥t%lf¥n",i,new_x,f(x),g(x));
/* fabs は double 型の変数について絶対値を求める関数 */
if( fabs(f(new_x)) < delta ) {
printf( "収束した¥n" );
printf( "解は %lf¥n", new_x);
break;
}
x = new_x;
}
printf( "Enter キーを1,2回押してください. プログラムを終了します¥n");
ch = getchar();
ch = getchar();
return 0;
}
•21
収束したかの判定を
行っている部分
反復公式