我有一些我想用 fmin 函数拟合的实验数据。我已经将 fmin 与另一个样本一起使用,一切正常。
这次我想用一个函数来表示数据,比如:
def f3(c,t):
resultat=0
test=t-c[0]
if (test<0):
resultat = c[1]
else:
resultat = c[1]+c[2]*(t-c[0])+c[3]*(t-c[0])*(t-c[0])+c[4]*(t-c[0])*(t-c[0])*(t-c[0])
return resultat
t 是时间向量,c[0] 是阈值(多项式系数的 c[i]) (顺便说一下,数据可以用这个函数表示,因为我用它来生成数据示例!)
函数错误由下式给出:
def e3(p,temps,y):
error = 0
i=0
for t in temps:
error = error + (f3(p,t)-y[i])**2
i=i+1
#cont = min(0,p[0])
#error = error +10000*(cont*cont)*(cont*cont*cont*cont)
return error
p3=[10,250,0,0,0] 并且 T_out 是一个向量
拟合操作是:
p3_min = fmin(e3,p3[:], args=(temps,T_out),xtol=0.0001,ftol=0.0001)
该指令对于“经典”多项式函数非常有效,但对于 f3 函数(其中带有“if”),p3_min 没有像预期的那样优化。
我试图实现像 p[0]>0 这样的约束或增加迭代次数,但我无法获得预期值。
有没有人尝试过用“阈值”函数拟合数据?如果能得到一些帮助,我将不胜感激。