0
ニュートンメソッドを実装したいと思っていました。私のコードはこれまでのところです:matlabのニュートンメソッド実装
fは関数ハンドルで、fは微分f(関数ハンドルでもあります)、xは開始値です。
これは、いくつかの機能のために動作しますが、私は
newton(@(x) x^2,@(x) 2*x,1)
をお願いする場合例えば、それが無限ループに入っています。これを修正するには?
ニュートンメソッドを実装したいと思っていました。私のコードはこれまでのところです:matlabのニュートンメソッド実装
fは関数ハンドルで、fは微分f(関数ハンドルでもあります)、xは開始値です。
これは、いくつかの機能のために動作しますが、私は
newton(@(x) x^2,@(x) 2*x,1)
をお願いする場合例えば、それが無限ループに入っています。これを修正するには?
ニュートン法の終了のための通常のチェックは別の反復の結果は前の回答に「非常に近い」ですが、あなたがチェックを使用しているかどうかを確認することです。
基本的に必要とif abs(xn) == abs(x)
2つの値が同じであることを除いて(あなたがabs
を使用したことを除いて、これは反復がその符号を反転させるように間違った答えを受け入れるのでバグです)。いくつかの問題では、これはうまくいくかもしれませんが、これは非常に近い値のセットを循環する反復で無限ループにつながる可能性が非常に高いです。
:xn
とx
が与えられた非常に小さな値を超えないことで異なるかどうかをテスト
if abs(xn-x) < 0.0000001 (or something else very small)
、それが動作するはずです。
x^2 = 0の根は0なので、*は* 0.0000001の範囲の根です。 –
さて、ありがとう!数値が非常に小さいときにMATLABが0を返すようにする方法はありますか? – zer0kai
正確な根を計算する方法はありますか(部門を計算するには)? – zer0kai