我正在尝试使用物理模型拟合数据。代码段包含在此处:
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)是我在其他地方定义的函数。我将tret_m和alpha_m作为参数传递给gamma(这些参数已经用数值初始化)。 gamma函数返回一个大小为1X600的数组
2. x是从文件中提取的1X600数组。