用scipy.optimize.anneal拟合数据

嗨,
我正在尝试将实验数据与scipy.Optimize.annal相匹配,但我认为我在阅读文档时没有得到正确的语法,并且我不能从我得到的错误中找出错误所在。
Ydata是y值,t是x值(实验数据),我正在尝试优化P0(Baseline,a1,fwhm,t0,decay1):

选择 | 换行 | 行号
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import math, sys, os
  4. from scipy.optimize import curve_fit, minimize, anneal
  5. from scipy.special import erf
  6.  
  7. p0=np.array([0.25, 1., 7., 15., 11.])
  8. t=np.array([5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0])
  9. ydata=np.array([0.53227518, 0.79152417, 0.96672679, 1., 0.76314581, 0.59492542, 0.48326752, 0.35906952,  0.32363437, 0.27881503])
  10. def func(t, Baseline, A1, fwhm, t0, decay1):
  11.     return Baseline + A1/2.*np.exp(((fwhm/(2.*math.sqrt(np.log(2.))))**2.-(4.*(t-t0)*decay1))/(4.*decay1**2.))*(1.+erf(((t-t0)/(fwhm/(2.*math.sqrt(2.*np.log(2.)))))-((fwhm/(2.*math.sqrt(np.log(2.))))/(2.*decay1))))
  12.  
  13. def diffa(p0, *data):
  14.     ydata,t=data
  15.     return abs(ydata - func(t, Baseline, A1, fwhm, t0, decay1))
  16. res = anneal(diffa, *p0)#, args=ydata)
  17.  

我收到以下错误:
文件"./jjfit_g",第54行,in
RES=退火(Diffa,*P0)#,args=ydata)
文件"/usr/lib64/python2.7/site-packages/scipy/optimize/anneal.py",第314行,处于退火期
RES=_MINIMIZE_ANANALL(FUNC,X0,ARGS,**OPTS)
文件"/usr/lib64/python2.7/site-packages/scipy/optimize/anneal.py",第374行,在_最小化_退火线中
Schedule=val(Schedule+'_sa()')
TypeError:+的操作数类型不受支持:'numpy.flat64'和'str'
错误发生在以下行:
RES=退火(Diffa,*P0)#,args=ydata)
我该怎么解决这个问题?
谢谢。

标签: python

添加新评论