• 締切済み

ニュートン法のプログラムの問題です。

ニュートン法のプログラムを書き換える問題なのですが、考えたものを実行してみても上手く値が求められなかったので質問させてください。 ・問題 ニュートン法でbのn乗根を求めるプログラムです。 これを、bを与えたときx/(x^2+1)=bとなるxを求めるプログラムに書き換えなさい。 10 input "n,b";n,b 20 x=1 30 f=x^n-b 40 d1=n*x^(n-1) 50 x1=x-f/d1 60 e=1*10^(-6) 70 if abs(f)<e then goto 100 80 x=x1 85 print x 90 goto 30 100 end 考えたものとしては、 f(x) = x^n - b を f(x) = x/(x^2 + 1) - b に、 d1(x) = n*x^(n - 1) を d1(x) = 1/(x^2 + 1) - 2*x^2*/((x^2 + 1)^2)に 改変するという方法だったんですが… 考え方とどのように改変すればこの値が求められるのか、わかる方教えてください! ちょっと急ぎなのでできれば簡潔に書いていただけると助かります… よろしくお願いします!

  • tu6v6
  • お礼率17% (3/17)

みんなの回答

回答No.1

問題点の指摘はできるけど,ソースは直ぐに思いつかない。 ●まず一つ目。 x/(x^2 + 1) - b = 0 ってそもそもxの解あるの? 移行してあげると x - b(x^2 + 1) = 0 b * x^2 - x + b = 0 判別式より (-1)^2 - 4 * b^2 >= 0 つまり 【-1/2 <= b <= 1/2 の場合にしかxの解は存在しませんから,b = 1とか入力されたときはエラーを返さないといけない】 ●二つ目。 x = 1のときの傾きは? d1 = 1/(x^2 + 1) - 2*x^2*/((x^2 + 1)^2) = 1/ 2 - 1 / 2 = 0 つまり x軸と交わらない。 #プログラミング言語のひとつである「C#」で同じものを組んだところ,IEEE754の仕様により0で割ったときに無限大という値が出る ので,【単調増加もしくは単調減少し、なおかつその接線がx軸と交われるような,最初の値を決めてあげないといけない】んだ。 たぶんその範囲さえうまく決めてあげられればすんなりいくはず。

tu6v6
質問者

補足

回答ありがとうございます! 「単調増加もしくは単調減少し、なおかつその接線がx軸と交われるような,最初の値を決めてあげないといけない」 ここの部分なんですが、ちょっとよくわからなくなってきました;; この範囲を決めるにはどうしたらいいんでしょうか??

関連するQ&A

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

  • BASICの数値解析(ニュートンラフソン法)について。

     私はプログラミングを始めたばかりの初心者です。学校でいまbasicを勉強しています。BASIC経験者の方、もしくはプログラミングに詳しい方よろしければお願いしたします。 (以下質問)  ニュートン・ラフソン法を用いて根を求めるプログラムについてですが、与えられた式  f(X)=X^2-333=0 で試行値:X0=1,5,10,50,100,500と変えていくとき(*RUN一回のみ)の解が求められないです。試行値を個々に与えて(INPUT6回)求めることはできました。ですが一度に列挙することができません。  私がやってみました方法は 1)試行値を関数(数列化)にしてみる。 2)元々の関数を関数(数列化)にしてみる。 3)IF文もしくはREAD文を用いる。 の3つですが、どの方法を取ってもエラーが止みません><。  基本的なことでしたら申し訳ないのですが、アドバイス、方針、対処策等教えて頂けたら嬉しいです。なお現在までにできているプログラムを書いておきたいと思います。ご参考ください。 (以下プログラム) 120 REM*******ニュートン・ラフソン法********* 130 N=1 140 INPUT"試行値は";X0: 145 PRINT X0 150 ER=.00001 180 FX=X0*X0-333 190 DFX=2*X0 200 X1=X0-FX/DFX 220 IF ABS(X1-X0)<ER THEN 250 230 X0=X1 :N=N+1 240 GOTO 180 250 PRINT X1,N 280 END

  • プログラミング ニュートン法簡単な例の説明が欲しい

    これはニュートン法で√nを求めるプログラムですけど このプログラムを一行ずつ説明してもいいですか? DEF f(x)=x^2-a DEF g(x)=2*x ! g(x)=f'(x) PRINT "input" INPUT a LET x=a LET E=EPS(1)*10 <----これは何? DO  LET x1=x-f(x)/g(x)  PRINT x1   IF ABS((x1-x)/x)<E THEN EXIT DO  LET x=x1 LOOP END

  • ニュートン法

    ケプラー方程式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; }

  • 数値計算 ニュートン法に関する問題です

    この問題のやり方を教えてください nの平方根をニュートン法で求める.n=1 √n が f(x)=(x^2)-n=0 の解であることを利用し、ニュートン法を用いて √n を求めるための漸化式を示せ. よろしくおねがいします 

  • ニュートン法について

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

  • ケプラー問題をニュートン法で解くプログラム

    ニュートン法を用いてケプラー問題を解くプログラムを作りたいのですが、正直全然わかりません。 問題は、θ(t)に対する非線型方程式   f(θ)=θ - e*sinθ - t = 0 を解くというものです。 ここではe = 0.5としてニュートン法を用いてθを求めるんですが、 どうプログラムを書いていけばいいか見当がつきません。 どなたか教えてください・・・ 宜しくお願いします。

  • ニュートン法について

    一番目:X0がIの元で。I=[a,b] X1=g(X0),X2=g(X1)とおくとき、 X0^(1)=X0-(X1-X0)^2/X2-2*X1-X0とすると X1^(1)=g(X0^(1)), X2^(2)=g(X1^(1)), X0^(2)=X0^(1)-(X1^(1)-X0^(1))^2/X2^(1)-2X1^(1)-X0^(1) このとき、 X0,X1,X2それぞれを求める解放がわかりません>< 二番目:F(x)=x-e^(-x)とおいてニュートン法で求めなさい。。とゆうのもよくわかりません>< 図書館で調べたりしたのですが。。意味がよくわかんなくて。。お願いします!

  • BASIC数値解析プログラムについて。

    初めまして、私は大学でBASIC初心者でN88互換BASICでのプログラミングを今年から勉強しています。↓のプログラムで収束過程の計算結果を実行画面に表示させたくてFOR~NEXT文でいろいろ試しているのですがエラーが出てしまいます。他の具体的な方法が浮かばないです。初歩的な質問でしたら申し訳ないのですが、BASIC経験者、もしくは現在やられている方でどなたか私にアドバイスをしていただけると助かります。 (x^2-a=0のaの根を求めるニュートン法のプログラムです) 120 REM*******ニュートン・ラフソン法********* 130 FOR I = 1 TO 6 132 READ X0 134 GOSUB 140 136 NEXT I 138 END 140 PRINT "試行値は";X0 145 N=1 150 ER=.00001 180 FX=X0*X0-333 190 DFX=2*X0 200 X1=X0-FX/DFX 220 IF ABS(X1-X0)<ER THEN 250 230 X0=X1 :N=N+1 240 GOTO 180 250 PRINT X1,N 280 RETURN 300 REM *************試行値************* 310 DATA 1,5,10,50,100,500

  • 数値計算の問題です

    この問題のやり方を教えてください nの平方根をニュートン法で求める.n=1 (1) √n が f(x)=(x^2)-n=0 の解であることを利用し、ニュートン法を用いて √n を求めるための漸化式を示せ. (2) 許容誤差ε=10^(-6)、√nの値を求めるプログラムを作成.   おねがいします。

専門家に質問してみよう