2016-12-23 6 views
0

ニュートンメソッドを実装したいと思っていました。私のコードはこれまでのところです:matlabのニュートンメソッド実装

fは関数ハンドルで、fは微分f(関数ハンドルでもあります)、xは開始値です。

これは、いくつかの機能のために動作しますが、私は

newton(@(x) x^2,@(x) 2*x,1) 

をお願いする場合例えば、それが無限ループに入っています。これを修正するには?

答えて

1

ニュートン法の終了のための通常のチェックは別の反復の結果は前の回答に「非常に近い」ですが、あなたがチェックを使用しているかどうかを確認することです。

基本的に必要と
if abs(xn) == abs(x) 

2つの値が同じであることを除いて(あなたがabsを使用したことを除いて、これは反復がその符号を反転させるように間違った答えを受け入れるのでバグです)。いくつかの問題では、これはうまくいくかもしれませんが、これは非常に近い値のセットを循環する反復で無限ループにつながる可能性が非常に高いです。

はあなたに終了テストを変更

xnxが与えられた非常に小さな値を超えないことで異なるかどうかをテスト

if abs(xn-x) < 0.0000001 (or something else very small) 

、それが動作するはずです。

+1

x^2 = 0の根は0なので、*は* 0.0000001の範囲の根です。 –

+0

さて、ありがとう!数値が非常に小さいときにMATLABが0を返すようにする方法はありますか? – zer0kai

+0

正確な根を計算する方法はありますか(部門を計算するには)? – zer0kai

関連する問題