【python】scipy.optimize.curve_fit

関数

非線形最小二乗法を使用して関数を近似する

特徴

公文書
ここに画像の説明を挿入
入力

パラメータ 価値
関数では、最初の入力パラメーターとして xdata を受け取る必要があります
xdata 測定された独立したデータ
ydata 関連データ、名目上は f(xdata,…) の結果

出力

出力 価値
ポップ 最適値、つまり x によるフィッティング関数の出力値
pcov popt の共分散行列
インフォディクト キーを含むオプションの出力の辞書 (full_output が True の場合にのみ返されます)
メッセージ 関連情報 (full_output が True の場合にのみ返されます)
イエ 整数フラグ。1、2、3、または 4 に等しい場合、解が見つかりました。そうでなければ、解決策は見つかりませんでした。いずれの場合も、オプションの出力変数 mesg を使用すると、より多くの情報が得られます。(full_output が True の場合にのみ返されます)

公式の例

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def official_demo_func(x, a, b, c):
    return a * np.exp(-b * x) + c


def official_demo():
    x = np.linspace(0, 4, 50)
    y = official_demo_func(x, 2.5, 1.3, 0.5)
    rng = np.random.default_rng()
    y_noise = 0.2 * rng.normal(size=x.size)
    ydata = y + y_noise
    plt.plot(x, ydata, 'b-', label='data')

    popt, pcov = curve_fit(official_demo_func, x, ydata)
    print(popt)

    plt.plot(x, official_demo_func(x, *popt), 'g--',
             label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.show()


official_demo()

ここに画像の説明を挿入
出力フィッティング結果は

[2.61499295 1.35033395 0.51541771]

まだ入力値 [2.5, 1.3, 0.5] に非常に近いです。

おすすめ

転載: blog.csdn.net/mimiduck/article/details/128921024