ニュートン法
2分法で $ f(x) = x^2-2 = 0 を解いて $ \sqrt{2} を求めたがもっと効率よくできないか。
この関数は簡単に微分できて $ f'(x) = 2x であるので接線が簡単に求められる。接線と $ x 軸との交点は,元の点より $ f(x) = 0 の解に近い。このことを利用して $ x を更新していけば,$ x はどんどん $ f(x) = 0 の解に近づく。この考え方を使ったのがニュートン法である。
プログラムを完成させよう。
code:newton.c
double f(double x)
{
return x * x - 2;
}
double fprime(double x)
{
return 2 * x;
}
int main(void)
{
double x = 2;
int i;
for (i = 0; i < 10; i++) {
x = ....;
printf("%.16g\n", x);
}
return 0;
}
問題1:上のプログラムを完成させよ。
問題2:$ a, $ b, $ c, $ d を与えると $ f(x) = ax^3 + bx^2 + cx + d = 0 の近似解をニュートン法で(一つでいいから)求めるプログラムを作れ。