• 締切済み

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

ニュートン法のプログラムを書き換える問題なのですが、考えたものを実行してみても上手く値が求められなかったので質問させてください。 ・問題 ニュートン法で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)に 改変するという方法だったんですが… 考え方とどのように改変すればこの値が求められるのか、わかる方教えてください! ちょっと急ぎなのでできれば簡潔に書いていただけると助かります… よろしくお願いします!

みんなの回答

回答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