ニュートン法をC言語でプログラム
方程式 cos^2x-0.5=0 (0<x<π) の解をニュートン法で求める
という問題をC言語のプログラムを作り計算したいのですが分かりません。
自分で考えてみたプログラムは以下の通りです。
#include <stdio.h>
#include <math.h>
#define f1(x) cos(x)*cos(x)-0.5
#define f2(x) sin(2*x)
/* ニュートン法による方程式の解 */
main()
{
double x0,x1,a,b,c,d,g,n;
a=1;
x0=0.7;
n=0;
while(a>0.0001){
b=x0;
d=f1(b);
g=f2(b);
x1=x0-d/g;
c=x1;
a=f1(c);
n=n+1;
printf(" n= %f x1=%f x0=%f\n",n,x1,x0);
printf(" a= %f → 解 x= %f \n", a,x1);
x0=x1;
}
}
自分としてはこれが精一杯で、何故間違ってるのか、何をどうすればいいのか、さっぱり分かりません。どういったところが間違ってるのか可能性だけでも示して頂ければ幸いです。
参考として、ニュートン法によるプログラム例として書かれていたものを上げさせて頂きます。
例: e^x-3=0 の解をニュートン法により計算する。
#include <stdio.h>
#include <math.h>
#define f1(x) exp(x)-3
#define f2(x) exp(x)
/* ニュートン法による方程式の解 */
main()
{
double x0,x1,e,a,b,c,d,g,n;
a=1;
x0=3;
n=0;
while(a>0.0001){
b=x0;
d=f1(b);
g=f2(b);
x1=x0-d/g;
c=x1;
a=f1(c);
n=n+1;
printf(" n= %f x1=%f x0=%f\n",n,x1,x0);
printf(" a= %f → 解 x= %f \n", a,x1);
x0=x1;
}
}