問題タブ [newtons-method]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++:ニュートンラフソンおよびオーバーロード関数
以下に示すように、初期推定init
、単項関数f
、および許容誤差を引数として取るニュートンラフソン求根アルゴリズムの簡単な実装を作成しました。tol
私の質問は、これは単項関数では完全に機能しますが、複数のパラメーターを持つ関数で機能するように実装を変更したいと思いf
ますが、1つのパラメーターを除くすべてが定数値を持ちます。明確にするために:以下に示すように、関数f(x)= 3x+2がある場合
その後、私の実装は機能します。ただし、任意の数の引数を持つすべての関数で機能するようにしたいのですが、最初の引数のみが可変です。したがって、関数f(x、y)= 3x+2yがある場合
同じ関数を使用してf(x、2)またはf(x、3)のルートを見つけたいのですが、1つまたは2つだけでなく、n個の引数についても同様です(例は単純な線形関数です。これは単なる例です)。さまざまな数の引数に対して関数を実装する方法はありますか、それともすべての場合に実装を作成する必要がありますか?
ありがとう、
NAX
ノート
これまでにわかるように、この質問は実際にはニュートンラプソンに関するものではありませんが、引数の数が異なる関数の単一の実装である実際の質問の例として使用すると簡単になります。
アップデート
以下のいくつかの回答は、問題を解決するために使用std::bind
しstd::function
ます。これは、選択した回答よりも実際に私の質問にうまく対処します。ただし、これらはc ++ 11ライブラリのクラス/関数であり(誤解しないでください。これは、すべてのc ++プログラマーに先に進んで学習することを強くお勧めします)、この記事の執筆時点では、いくつかの問題に直面していました。それらを使用する; g ++ 4.7(c ++ 11準拠)を使用するEclipse Junoは、まだ何らかの理由で認識できなかったためstd::function
、以下のチェック済みの回答を使用することにしました。これもうまく機能します。
python - Python を使用して解くベクトル係数を持つ非線形 ODE 方程式系
y について次のシステムを解く必要があります。
それは次のようになります:
2 つのスクリプトに基づいて Python プログラムを作成しました。メイン プログラムと 2 番目の newton-jacobian スクリプトは、ニュートン反復法を使用しているため、この問題には u と u' に 2 つの境界条件があります。
今、私は次のものを解決することができます:
k=定数の場合のみ!
私の問題では、プログラムで計算された x に依存する k には N 値があります。
上記の非線形システムを解く方法を知っているか、提案できる人はいますか? k を補間し、2 番目のニュートン ソルバー スクリプトで k_function() を呼び出そうとしましたが、うまくいきませんでした。認識していません。
非線形方程式のアナログ系を解いた人からの提案は、大歓迎です!
python - Python の Bisection 法を使用した改良された Newton 法
2 つの境界条件を持つニュートン法 (Jacobian N+1 * N+1) を使用して、高次元 (i=0,N) の非線形方程式の 2 次システムを解くコードを作成しました。
この N 次元の問題で二分法を実装することが可能かどうか、お尋ねしたいと思います。残念ながら、ニュートン収束は、私の問題の一部の領域では機能しません。
このソースによると: http://ursa.as.arizona.edu/~rad/phys305/root_finding/node4.html
改善された根発見スキームは、二分法とニュートン ラフソン法を組み合わせることです。二分法は根 (または特異点) を保証し、線形仮定が不十分な場合にニュートン ラフソン法によって推定される位置の変化を制限するために使用されます。ただし、ニュートン ラフソン ステップは、収束を高速化するために、ほぼ線形の領域で実行されます。
言い換えれば、2 つの境界点の間にルートがあることがわかっている場合、最初にニュートン ラフソン ステップを検討します。それがブラケット範囲外の次の点を予測する場合、次の点となる範囲の中間点を選択することにより、代わりに二等分ステップを実行します。次に、次の点で関数を評価し、その評価の符号に応じて、境界点の 1 つを新しい点に置き換えます。これにより、根括弧が保持され、ニュートンラフソンの速度を利用できます。"
... N次元の問題でPythonでそれを行うことは可能ですか?
n次元のFORTRANのRtsafeモジュールはこれを行うことができ、Matlabには同様のモジュールがあるかもしれません...
matlab - MATLAB: sym から論理への変換はできません
ここで構築しているユーザー定義関数に問題があります。私がやろうとしているのは、値をシンボリック関数に代入し、その数値の答えをさまざまな目的に使用することです。具体的には次のとおりです。
プログラムを実行すると、次のエラーが表示されます。
使ってみましdouble(subs(f,x))
たがダメでした。MuPAD に関連するまったく別のエラーが発生しているようです ( DOUBLE cannot convert the input expression into a double array.
)
以下がプログラム全体です。
私が間違っていることについてのいくつかの指針をいただければ幸いです。ではごきげんよう。
algorithm - なぜ `x = x*(1.5f-(xhalf*x*x));` がニュートン法の反復になり得るのですか?
わかりました、多くの人が有名な高速逆平方根を知っていると思います (独自の平方根関数の記述と0x5f3759dfの詳細を参照してください) 。
ここにコードがあります
わかりました、魔法0x5f3759df
がどのようなものかをこれ以上知る必要はありません。
私が理解していないのは、なぜx*(1.5f-(xhalf*x*x))
反復なのNewton Method
ですか?
分析してみましたが、わかりません。
r が実数で、x が r の逆平方根であると仮定しましょう。
1 / (x^2) = r
、f(x) = r*(x^2)-1
そしてf'(x) = 2 * r * x
したがって、1回の反復は であるはずx1 = x - f(x)/f'(x) = x / 2 + 1 / (2 * r * x)
ですよね?
どうしてx * (1.5 - ((r / 2) * x * x))
ですか?(ここに置き換えxhalf
たことに注意してr / 2
ください)
編集
OKf(x) = x^2 - 1/r
は別の形式です。計算させてください
f(x) = x^2 - 1 / r
f'(x) = 2 * x
それでx1 = x - (f(x)/f'(x)) = x - (x^2 -(1 / r))/(2*x) = x / 2 + 1 / (2 * r * x)
、それでもコードで使用されている式とはかなり異なりますよね?
python - TypeError: タプル (「float」ではない) をタプルに連結することしかできません
私はPythonを初めて使用するので、質問は簡単かもしれませんが、しばらくお待ちください:
ニュートンラフソン法を呼び出して、コール/プットオプションの価格設定のブラックショールズ式のインプライドボラティリティを計算しようとしていたので、最初に、scipy.optimize のニュートン法は関数のゼロを計算するようですが、Black- Scholes 式では、関数の値をゼロではなくオプション価格にしたいと考えています。(私はここでプログラミングについては初めてなので、いくつかのテクニックについてはわかりません。)次のようなことを行う別の関数を作成する必要があります。
次に、newton メソッドを呼び出すときに、args=() を関数の 1 つのパラメーターとして取ります。次のように記述します。
しかし、このエラーメッセージが表示されます:
その理由を教えてください。修正方法は?とても有難い。