我正在尝试将一些数据拟合到与 x 的某个幂成反比的模型中。我查看了一些类似的线程,我认为问题可能与扩展我的数据有关,但我已经尝试过,但不幸的是没有成功。
import numpy as np
import scipy.optimize as optimize
import matplotlib.pyplot as plt
x = np.array([367.18,411.42,443.76,565.22,689.31,778.94,867.38,963.98,1085.79,1112.01,1212.47,1299.21,1408.08,1458.8,1528.76])
y = np.array([17.21,13.38,9.41,11.40,6.40,6.62,6.11,5.50,5.03,4.52,2.34,3.62,3.84,5.97,1.97])
def f(a,n,x1):
return (a*np.power(x1,-n));
popt, pcov = optimize.curve_fit(f,x,y, diag=(1./x.mean(),1./y.mean()))
x1 = np.linspace(0,1700,num =1700)
plt.plot(x1, f(x1, *popt))
plt.plot(x,y,'ro')
plt.show()
print(popt, pcov)
结果是这样的:Plot
您对函数的参数有f
误。根据 的文档curve_fit
,
模型函数 f(x, …)。它必须将自变量作为第一个参数,并将要拟合的参数作为单独的剩余参数。
因此,您只需要将参数的顺序更改为f
,然后将其x1
放在首位:
def f(x1, a,n):
return (a*np.power(x1,-n))
此外,关于绘图的另一个注意事项,为了能够看到拟合,请使用以下内容定义自变量以绘制曲线,使其适合您的数据范围:
x1 = np.linspace(min(x),max(x),num =1700)
然后你会得到这个数字:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句