我正在尝试使用物理模型拟合数据。代码片段包含在这里:
from scipy.optimize import fmin as simplex
def chi2(p1,x,y_r):
chisq = 0.0
for i in range (len(x)):
real_f=(np.abs(gamma(tret_m,alpha_m)[i])*(p1[0]*sin(p1[1]*x[i]+p1[2]))+ \
p1[3]*np.abs((gamma(tret_m,alpha_m)[i]))**2
if (300>p1[3]>250 and 65>p1[0]>60):#constraining parameters
chisq += (real_f-y_r[i])**2
else:
chisq=1.0e15
return (chisq)
popt = simplex(chi2, guess1, args=(x,obs),ftol=1.0e-6,maxiter=1000000, maxfun=1000000)
输出产生的参数与初始猜测提供的参数相同(作为guess1传递)!输出显示了这一点(除了参数列表):
Optimization terminated successfully.
Current function value: 1000000000000000.000000
Iterations: 19
Function evaluations: 170
有什么线索可以让我让这个函数运行直到函数值收敛?
编辑:
1. gamma(tret,alpha) 是我在别处定义的函数。我将 ret_m 和 alpha_m 作为参数传递给 gamma(这些参数已用数值初始化)。gamma 函数返回一个大小为 1X600 的数组。
2. x 是从文件中提取的 1X600 数组。