Python には Polyfit() 関数がある多項式近似に加えて、指数関数を近似する手法が存在します。および対数曲線。
へモデル y = A B log x に曲線を当てはめると、両辺の対数を取ることでデータを変換でき、結果は log y = log A B log x になります。 Polyfit() を使用して log y を log x に対してフィッティングすることにより、係数 log A と log B を取得します。
import numpy as np
x = np.array([1, 7, 20, 50, 79])
y = np.array([10, 19, 30, 35, 51])
coeffs = np.polyfit(np.log(x), y, 1)
print("Coefficients:", coeffs)
print("y ≈", coeffs[1], " ", coeffs[0], "log(x)")
モデル y に曲線を近似するには= Ae^(Bx) の場合、両辺の対数を取ることができ、log y = log A B x となります。次に、polyfit().
x = np.array([10, 19, 30, 35, 51])
y = np.array([1, 7, 20, 50, 79])
coeffs = np.polyfit(x, np.log(y), 1)
print("Coefficients:", coeffs)
print("y ≈", np.exp(coeffs[1]), "*", "exp(", coeffs[0], "x)")
重み付けされていないフィッティング (データ ポイントの重みを考慮しない) では、特に指数関数的カーブ フィッティングにおいて、小さな値へのバイアスが生じる可能性があることに注意してください。これを軽減するために、Y 値に比例した重みをフィッティング プロセスに含めることができます。
Scipy には、非線形曲線近似を実行する Curve_fit() 関数が用意されています。これにより、変換を行わずに任意のモデルを直接適合させることができます。
from scipy.optimize import curve_fit
# Logarithmic curve fitting
popt, pcov = curve_fit(lambda t, a, b: a b * np.log(t), x, y)
print("Coefficients:", popt)
print("y ≈", popt[1], " ", popt[0], "log(x)")
# Exponential curve fitting
popt, pcov = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(1, 0.1))
print("Coefficients:", popt)
print("y ≈", popt[0], "*", "exp(", popt[1], "x)")
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3