[英]How to fit math function to the dataset in Python
這就是我解決這個問題的方法,作為 NumPy 和 SciPy 的初學者:
首先,創建一個我們認為為每個x
計算y
的 Python function。 (這個等式在上面的問題中。)
def fx(x, a, b, c, d):
return -a / x**d + b*x + c
然后我們需要圖表中的一些數據,這些數據沒有包含在問題中,所以我猜了一下,使用問題中的綠色圖表:
x = [0.01, 1000, 2000, 4000, 6000, 8000, 10000]
y = [1, 1.67, 1.75, 1.67, 1.6, 1.5, 1.4]
(x = 0 是一個無效點,因為0**d
是 0,我們不能除以零。這就是我說“0.01”的原因。)
然后我們讓 SciPy 計算常量應該是什么:
from scipy.optimize import curve_fit
popt, pcov = curve_fit(fx, x, y)
print(popt)
這會導致“RuntimeError:未找到最佳參數”。 我們可以通過手動猜測d
的值來提供幫助:
def fx(x, a, b, c):
d = -0.1
return -a / x**d + b*x + c
popt
變量將包含a
、 b
和c
的值:
[-5.64063556e-01 -6.55610681e-05 6.41890483e-01]
在進行這樣的實驗並嘗試不同的值時,使用像Desmos這樣的圖形計算器會很有幫助。
scipy中有一個函數可用於將函數擬合到數據: scipy.optimize.curve_fit 。
感謝您的所有幫助。 我從朋友那里得到了解決方案。
y = -a / x ** d + b * x + c
由於d使擬合變得復雜,因此將d從0.1設置為1.0會更容易,然后使用curve_fit擬合模型。 最后找到最佳參數集。
不勝感激!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.