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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 13:55:30845ブラウズ

How can I perform exponential and logarithmic curve fitting in Python?

曲線近似: Python での指数関数と対数のアプローチ

Python では、polyfit() を使用して多項式曲線近似を簡単に利用できますが、このガイドでは指数曲線と対数曲線の方法について説明します。フィッティング。

対数フィッティング

y = A B log x の形式の直線をフィッティングするには、単に log x に対して y の多項式フィッティングを実行します。

<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("y ≈", coeffs[1], "log(x) +", coeffs[0])  # y ≈ 8.46 log(x) + 6.62</code>

指数関数フィッティング

y = Ae^{Bx} の形式の直線をフィッティングするには、両辺の対数を取り、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("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 0.670 * exp(0.105 * x)")</code>

より良い方法精度を高めるには、polyfit() の w キーワードを使用して y に比例する重みを利用します。

<code class="python">coeffs = np.polyfit(x, np.log(y), 1, w=np.sqrt(y))
print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 4.12 * exp(0.0601 * x)")</code>

ほとんどのスプレッドシートおよび関数電卓アプリケーションでは、指数回帰に重み付けされていない式が使用されるため、互換性が必要な場合は重み付けを避けてください。

scipy.optimize.curve_fit の使用

scipy が利用可能な場合は、変換なしでモデルをフィッティングするために Curve_fit を使用します。

<code class="python">from scipy.optimize import curve_fit

# Logarithmic fitting
coeffs, _ = curve_fit(lambda t, a, b: a + b * np.log(t), x, y)
print("y ≈", coeffs[1], "log(x) +", coeffs[0])  # y ≈ 6.62 + 8.46 log(x)

# Exponential fitting with initial guess
coeffs, _ = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(4, 0.1))
print("y ≈", coeffs[0], "exp(", coeffs[1], " * x) = 4.88 exp(0.0553 x)")</code>

初期推定を提供することで、curve_fit は目的の値に到達できます。指数関数近似の極小値。変換されたポリフィット法よりも正確な近似が得られます。

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

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