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 は、非線形曲線近似を実行する 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 サイトの他の関連記事を参照してください。