質問: 数値計算?? f(x)=x-cosx=0 の解を求めるプログラムを教えて下さい。 ニュートン法と逐次代入法で 初期値は0.5、収束判定は10の-10乗 と先生が言ってたのですが 全くわかりません。 お願いします。
回答: 参考までにcで作ってみました。 /* f(x)=x-cosx=0 の解をx=0.5から始めてe=10^(-10)の範囲で求める */ /* ニュートン法: f'(x)=1+sinx 点(a,b)を通り傾き1+sinaの直線は y-b=(x-a)(1+sina) x軸との交わる時のxは x=-b/(1+sina)+a */ #include #include void main(void){ double xold,xnew,e; unsigned c=0; e=pow(10,-10); xnew=0.5; do{ c++; xold=xnew; xnew=(cos(xold)-xold)/(1.0+sin(xold))+xold; }while(fabs(xnew-xold)>e); printf("繰り返し数(%u):x=%#12.11g,e=%#g\n",c,xnew,e); } /* f(x)=x-cosx=0 の解をx=0.5から始めてe=10^(-10)の範囲で求める */ /* 逐次代入法 */ #include #include void main(void){ double xold,xnew,e; unsigned c=0; e=pow(10,-10); xnew=0.5; do{ c++; xold=xnew; xnew=cos(xold); }while(fabs(xnew-xold)>e); printf("繰り返し数(%u):x=%#12.11g,e=%#g\n",c,xnew,e); } このプログラムでは、ニュートン法が10倍以上速いことがわかりますね。