所以我不知道該怎麼做,而且我也不確定是否有一些數學現在完全忘記了,但我很茫然。總之,我有使用SciPy的和numpy的一些相當簡單的初始代碼,我想適合的指數曲線它:找到指數曲線擬合的初步猜測
from scipy.optimize import curve_fit
import numpy as np
# sample data
x = np.array([7620., 7730., 7901., 8139., 8370., 8448., 8737., 8824., 9089., 9233., 9321., 9509., 9568., 9642., 9756., 9915., 10601., 10942.])
y = np.array([0.01228478, 0.01280466, 0.01363498, 0.01493918, 0.01530108, 0.01569484, 0.01628133, 0.01547824, 0.0171548, 0.01743745, 0.01776848, 0.01773898, 0.01839569, 0.01823377, 0.01843686, 0.01875542, 0.01881426, 0.01977975])
# define type of function to search
def model_func(x, a, k, b):
return a * np.exp(-k*x) + b
# curve fit
p0 = (2.e-6,300,1)
opt, pcov = curve_fit(model_func, x, y, p0)
a, k, b = opt
# test result
x2 = np.linspace(7228, 11000, 3000)
y2 = model_func(x2, a, k, b)
fig, ax = plt.subplots()
ax.plot(x2, y2, color='r', label='Fit. func: $f(x) = %.3f e^{%.3f x} %+.3f$' % (a,k,b))
ax.plot(x, y, 'bo', label='data with noise')
ax.legend(loc='best')
plt.show()
我的問題是嘗試,因爲我可能我想不通的初始參數p0-我嘗試了一系列的價值觀,但坦率地說,我不知道我在做什麼,所以我沒有在這裏找到解決方案。有人可以建議如何去做?謝謝!
供參考:@MNewville有一些適合指數的有用建議:https://stackoverflow.com/questions/45312404/new-error-in-old-code-in-numpy-exp/45314363#45314363 –
看着你的數據,你應該從'a'的負值開始。對'k'來說可能不是那麼大,但我想Levenberg-Marquardt會爲你解決這個問題。 –
請注意,由於添加常量「b」,在日誌空間中工作不適用於您的模型。 –