私はlmfit pythonパッケージhttps://lmfit.github.io/lmfit-py/を使用して、いくつかのパラメータのバリエーションの許容範囲内で指定された非線形関数にデータをフィッティングしています(これは主にlmfitが魅力的である理由です)。既知のローカルパラメータとlmfitのグローバルパラメータを区別する方法は?
一般に、lmfitの2つの重要なコード行は次のとおりです。
私のアプリケーションは、36個のデータグラフにグローバルにフィットすることです。キャッチは、いくつかのパラメータが(vary = None)に適合しておらず、既知量であり、36個のグラフ全体で変化しますが、グラフ内では同じままであることです。現在、これらの既知のパラメータを関連するx_dataおよびy_dataポイントに渡すために、次の構文を実装しようとしています。
def fcn2min(params, x_data, y_data, known_params):
result = minimize(fcn2min, params, args=(x_data, y_data, known_params))
ここで、x_data、y_data、およびknown_paramsは同じ長さの配列です。 x_dataとy_dataは36個のグラフすべてからなる単一の配列で構成され、known_paramsは各グラフで固定されているパラメータの繰り返しエントリを持つ3列の配列です。
現在、プログラムはかなり遅い(実行が完了するまで30分)。また現時点では、フィットグラフはすべてのグラフで同じですが、既知のパラメータで各ローカルグラフにフィットさせ、グローバルパラメータのみにフィットさせたいと思います。
私はこれを正しく行っていますか?私は、なぜminim()がy_dataへの参照を必要とするのか理解していますが、なぜfcn2min()は入力としてy_dataを必要としますか? y_dataまたはknown_params配列に適合しているかどうか、私の適切なプログラムが混乱することはありますか? lmfitでこれを行うには良い方法がありますか、別の数値パッケージを探すべきですか?
あなたが正しく、私はminim()を誤解しました。モデルを返すのではなく、モデル - y_dataの復帰が必要です。モデル関数をdef fcn2min(params、x_data、y_data = None)に変更しました。そして、y_dataがNoneの場合、最後にifステートメントを置いてください。return model。これは、minim()の両方でfcn2minを使用し、params placeのresult.paramsでモデルをプロットするのに役立ちました。 – user6581543
私の2番目の質問は、それぞれのknown_paramsとそれぞれのx_dataを1つのリストに組み合わせたチートです.fcn2minではforループを使ってx_dataと適切なknown_paramsを選び、fcn2minの中に割り当てます。配列を整理するためにリスト内でリストを渡そうとするたびに、minimize()はN> Mのエラーを返し続けました。 – user6581543
リストやその他のデータ構造のリストを渡すことは可能ですが、目的関数は、Float64型の1次元配列でなければなりません。 –