• ベストアンサー

ニュートン法で、f(x)=2sin(x)-0.5x+1=0の解を求める

ニュートン法で、f(x)=2sin(x)-0.5x+1=0の解を求めるとき、x1=0を初期値として計算すると、x3はいくらになりますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • info22_
  • ベストアンサー率67% (2650/3922)
回答No.2

f(x)=2sin(x)-0.5x+1 f'(x)=2cos(x)-0.5 x1=0とした時 x2=x1-f(x1)/f'(x1)=-2/3=-0.66667 x3=x2-f(x2)/f'(x2)=-0.75679 なお、有効桁数10桁で計算すると x=-0.76227518422212 となります。

参考URL:
http://ja.wikipedia.org/wiki/ニュートン法

その他の回答 (1)

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.1

ニュートン法では初期値をX0,近似値をX1とすると  X1 = X0 - F(X0)/F'(x0) で計算できます。 この問題では F'(X)=2cosX-0.5 になりますから X0 = 0 から出発すると X1 = 1 -1/1.5 = 0.333 となります。従って今度は X0 を 0.333 として計算を進めればいいのです。この作業を繰り返し、X1 と X0 との差がゼロに近くなったところでやめればいいのです。ですからいくらになるかは止めたときの回数によって異なりますから自分でやって下さい。

関連するQ&A

  • ニュートン法で解が収束しない

    こんにちは。 差分式で表した非線形方程式をニュートン法で解いています。が収束しな解あります。ニュートン法は初期値に依存しているため、初期値を可変的にしてみましたがダメでした。何かいい方法はないでしょうか? 参考になるか分かりませんが、使っているプログラムのニュートン法の計算の一部は以下のようです。 call g(x,f,df) h=f/df x=x-h if(dabs(h/x)<1.d-14) then  return endif

  • ニュートン法

    excelVBAを使っています。 ニュートン法を使って3次方程式を解こうとしています。 例題)x^3-6x^2+11x-6=0    x=1,2,3 初期値x0によって、解がx=1,2,3のどれかに収束します。 ここで、全ての実数解を求める考え方をご教授下さい。 f(x)=x^3-6x^2+11x-6=0の解x1が求まった後、 f(x)=(x-x1)g(x)なるg(x)を求めるといったことが、あるサイトに書かれてあったのですが、なぜそうなるのか理解できません・・・

  • ニュートン法の計算について

    3次方程式 X^3+3X^2-3X-4=0 は区間(-4,-3),(-1,0),(1,2)にそれぞれ1つの実数解をもつ。ニュートン法により、3つの実数解を小数点以下8桁まで正確に求めよ。 上の問題をニュートン法で解きたいのですが、初期値はどうすればいいのでしょうか? -4、-1、1 でいいのでしょうか? 初期値を決めれば、あとは3つの初期値を使って普通にニュートン法で計算すれば解けますよね?? 数学が苦手で困っています。 回答お願いします。

  • ニュートン法の問題です!

    ニュートン法の問題です! わかる方がいたらおしえてくださいこまってます! f(x)=-1+x+x2とおいて、newton法を用いてf(x)=0の解を求めよ。newton法で使用する漸化式と初期値x0=1としたときの計算過程と結果を示しなさい。 とけるかたがいたら本当におねがいしますたすけてください

  • ニュートン法で問題が途中までしか解けません

    ニュートン法で初期値:x1=π として0=sinx-x/2の解を求めます。 |x(i+1)-xi|=10^-3 のときに収束したとしてx(i+1)を解とするのですが まず f(xi)=sinxi-xi/2 f'(x)=cosxi-1/2 として x(i+1)=xi-f(xi)/f'(xi)として解いていったのですが x1=π x2=2.094395102 x3=1.913222955 ここまでは順調だったのですがx4で値が急に4を超えてしまってわからなくなってしまいました。x4はx(i+1)=xi-f(xi)/f'(xi)のxiにx3の値を入れただけなのですが何度計算してもうまくいきません。 どこか方法が間違っていたら指摘お願いします。

  • ニュートン法を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; } }

  • ニュートン法

    こんにちは。 aを解とするある非線形方程式に,aの近傍の値x0を初期値としてニュートン法を一反復だけ適用したところ、誤差は |x0-a|=10^-4から|x1-a|=10^-7に減少した。このとき、ニュートン法をもう一反復適用したら誤差|x2-a|はどの程度になると推定されるのでしょうか?

  • Javaを使ってx^2-2x-3=0の解(ニュートン法)で求めたいので

    Javaを使ってx^2-2x-3=0の解(ニュートン法)で求めたいのですが どのようなプログラム書けば良いのですか? よろしくお願いします;

  • ニュートン法について

    ニュートン法の問題ですが、3の立方根をニュートン法で計算する問題で初期値がX0=1で繰り返し3回までの経過を示す問題です。 f(x+n)=fx(n+1)/fx'(n+1) この式にf(x)=3^(1/3) を代入すればいいのですか? わかる方お願いします。

  • ニュートン法

    ケプラー方程式x-e*sin(x)-c=0の解をステップ数とともに出力するプログラムで、e,cはそれぞれ0.5と1です。 xに値を入力して計算させるのですが、どうしてもできません。 下のプログラムリストでおかしいところはどこでしょうか? // ニュートン法 x-e*sin(x)-c=0 #include <stdio.h> #include <math.h> #define e 0.5 #define c 1.0 #define K 10000 double fun(double x); double bibun(int i,double x); float m=1.0,n=1.0; int i=1; main(){ float x1,x2; float z; printf("初期値x0を入力して下さい\n"); scanf("%f",&x1); for(i=0;i<=K;i++){ x2 = x1 - fun(x1)/bibun(i,x1); x1 = x2; z = fun(x1); z = fabs(z); if(fabs(z)<=0.00001){ break; } if(i==K){ printf("収束しません\n"); exit(0); }    } printf("解 = %f\n",x1); printf("ステップ数 = %d",i); return 0; } // 関数f(x) double fun(double x1){ double r; r = x1 - e * sin(x1) - c; return r; } // 微分 double bibun(int i,double x1){ float p; if(i%2==1){ p = pow((-1.0),m)*e*sin(x1); m++; } else { p = pow((-1.0),n)*e*cos(x1); n++; } return p; }