我一直在尝试使用 scipy.optimize.curve_fit
对一些数据进行函数拟合,但是我遇到了很大的困难。我真的看不出为什么这样不起作用。
# encoding: utf-8
from __future__ import (print_function,
division,
unicode_literals,
absolute_import,
with_statement)
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as mpl
x, y, e_y = np.loadtxt('data.txt', unpack=True)
def f(x, a, k):
return (1/(np.sqrt(1 + a*((k-x)**2))))
popt, pcov = curve_fit(f, x, y, maxfev = 100000000)
mpl.plot(x, f(x, *popt), 'r-', label='Fit')
mpl.plot(x, y, 'rx', label='Original')
mpl.legend(loc='best')
mpl.savefig('curve.pdf')
print(popt)
# correct values which should be calculated
# a=0.003097
# k=35.4
这是由上面的代码生成的图像:
data.txt:
#x y e_y
4.4 0.79 0.13
19.7 4.9 0.8
23.5 7.3 1.2
29.7 17 2.79
30.7 21.5 3.52
34 81 13.28
34.6 145 23.77
35.4 610 100
36.3 115 18.85
38.1 38 6.23
43.7 14 2.3
56.2 6.2 1.02
64.7 4.6 0.75
79.9 3.2 0.52
210 0.98 0.16
f
是什么类型的函数? - Juh_curve_fit
作为优化器? - Juh_curve_fit
,因为我不知道其他的替代方法。也许你可以告诉我,哪个优化器会更好一些。谢谢。 - user2870269f
&数据)有关。Greg的回答很好。 - Juh_