この記事では、C言語でニュートン法により方程式の解を解を求めるプログラムについてソースコード付きで解説します。
ニュートン法
ニュートン法は、方程式を近似的に解くアルゴリズムの1つです。
このアルゴリズムでは、接線の性質を利用することで数値計算的に近似解を求めていきます。
【参考】ニュートン法のアルゴリズム
今回は、このアルゴリズムをC言語で実装してみました。
ソースコード
サンプルプログラムのソースコードです。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x)
{
return x*x - 4;
}
double df(double x)
{
return 2*x;
}
void newtonMethod(double a, double eps, double *result, double *num)
{
int i=0;
double ah;
while(i<1000) {
i++;
ah = a - f(a)/df(a);
// 収束条件を満たせばループ終了
if(abs(ah - a)<eps) break;
a = ah;
}
*result = a;
*num = i;
}
int main()
{
double result;
int num;
// ニュートン法(初期値, 収束条件)
newtonMethod(1.0, 1.0e-5, &result, &num);
// 結果表示
printf("解:%f(収束回数%d 回)\n", result, num); // 解:2.000000(収束回数0 回)
return 0;
}
解説
newtonMethod(1.0, 1.0e-5, &result, &num);
■引数
| パラメータ | 説明 |
|---|---|
| 1.0 | 初期値。出来るだけ解に近い値 |
| 1.0e-5 | 終了条件(現在の近似解と1つ前の近似解の差が十分小さければ真の解に収束していると判定して終了) |
■返り値
| パラメータ | 説明 |
|---|---|
| result | 計算した近似解: |
| num | 計算回数: |
■他の関数
| 関数 | 説明 |
|---|---|
| f(double x) | 解を求めたい方程式の関数 |
| df(double x) | 解を求めたい方程式の導関数 |
【関連記事】
C言語で数値計算処理
C言語入門
数値計算プログラミング入門


コメント