ホームページ  >  記事  >  バックエンド開発  >  多項式フィッティングを超えて、Python で指数関数および対数曲線フィッティングを実行するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 02:47:29373ブラウズ

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

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

Python には、polyfit() 関数がある多項式近似に加えて、指数関数を近似する手法が存在します。

対数曲線近似

モデル y = A B log x に曲線を近似するには、両辺の対数を取ることでデータを変換でき、結果として log y = となります。ログ A B ログ x。 Polyfit() を使用して log y を log x に対してフィッティングすることにより、係数 log A と B を取得します。

<code class="python">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)")</code>

指数曲線フィッティング

モデル y = Ae^ に曲線をフィッティングするには(Bx) の場合、両辺の対数を取ることができ、log y = log A B x となります。パラメーターは、polyfit() を使用して x に対して log y をフィッティングすることによって決定できます。

<code class="python">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)")</code>

非重み付きフィッティングにおけるバイアスに関する注意

非重み付きフィッティング (次の重みを考慮せずに) に注目する価値があります。データ ポイントなど)、特に指数関数的曲線近似において、小さな値への偏りが生じる可能性があります。これを軽減するために、Y 値に比例した重みをフィッティング プロセスに含めることができます。

曲線近似に Scipy を使用する

Scipy は、非線形曲線近似を実行する Curve_fit() 関数を提供します。これにより、変換せずに任意のモデルを直接適合させることができます。

<code class="python">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)")</code>

以上が多項式フィッティングを超えて、Python で指数関数および対数曲線フィッティングを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。