非常に複雑な方程式のルーツを見つけ出す必要があります。私は、Pythonに役立つ一連の関数があると読んでいます。私は彼らがどのように動作するか把握しようとしましたが、かなりうまくいかなかったのです。私が見た例ではなく、私は、この関数の根を見つけるために必要なすべての非常に簡単です:BとK実数正の数でSciPy Newton Method
。誰も助けることができますか?
非常に複雑な方程式のルーツを見つけ出す必要があります。私は、Pythonに役立つ一連の関数があると読んでいます。私は彼らがどのように動作するか把握しようとしましたが、かなりうまくいかなかったのです。私が見た例ではなく、私は、この関数の根を見つけるために必要なすべての非常に簡単です:BとK実数正の数でSciPy Newton Method
。誰も助けることができますか?
ここでは2つの解決法がありますが、2番目はおそらく問題を解決するより簡単で正しい方法です。
このトリックは、f
にKとBの値を記憶させる必要があるということです。これを行う方法の1つは、別の関数の内部関数にすることです。外部関数は、KとBを設定するために使用されます。これらは、返される内部関数の可変スコープにあります。このようにして、内部のf
関数は値を覚えることができます。返された関数は、単純にNewton-Raphsonメソッドに渡され、ルートを検出します。
from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np
def get_f(K=1, B=1):
def f(x):
return np.exp(-B*(np.power(B, x))-factorial(x)*K)
return f
f = get_f(K=2, B=3)
print newton(f, 3, maxiter=1000)
ユーザがnewton
関数はニュートン・ラプソン関数に追加の引数を渡すために使用することができるargs
引数を有することをコメントしました。関数がf(x、a、b、c ...)の形式の場合、a、b、c ...はargs
で与えられる余分な引数です。
同じソリューションは次のようになります。
from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np
def f(x, K, B):
return np.exp(-B*(np.power(B, x))-factorial(x)*K)
print newton(f, 3, args=(2, 3), maxiter=1000)
"*トリックは、関数fをKとBの値を覚えておかなければならないということです。" *トリックは必要ありません。 'newton'の引数' args'を使うだけです。 –
ありがとう@WarrenWeckesser、知っていい:) –
'私は、彼らがどのように機能するかを把握することを試みたが、私はあなたがしようとしたものを示し、また、あなたが得たエラーを含めてくださいかなりbad'失敗しました。 – cel
BとKは定数ですが、それらは以前に設定されたいくつかのパラメータに従って変更できます。私はそれらをどのように設定できるのか理解できません。私はdef f(x、B、K)という関数を定義しようと考えていましたが、うまくいくかどうかわかりません。 – haster8558
* "def f(x、B、K)関数を定義しようと考えていましたが、うまくいくかどうかわかりません" *これはscipy最適化関数で行う標準的な方法です。試してみます。 –