「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 多項式フィッティングを超えて、Python で指数関数および対数曲線フィッティングを実行するにはどうすればよいですか?

多項式フィッティングを超えて、Python で指数関数および対数曲線フィッティングを実行するにはどうすればよいですか?

2024 年 11 月 20 日に公開
ブラウズ:401

How do you perform exponential and logarithmic curve fitting in Python beyond polynomial fitting?

多項式近似を超えた Python の指数関数および対数曲線近似

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 を使用した曲線近似

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