Pass tuple as input argument for scipy.optimize.curve_fit

后端 未结 4 1708
刺人心
刺人心 2021-02-14 20:21

I have the following code:

import numpy as np
from scipy.optimize import curve_fit


def func(x, p): return p[0] + p[1] + x


popt, pcov = curve_fit(func, np.ara         


        
4条回答
  •  [愿得一人]
    2021-02-14 20:41

    You can define functions that return other functions (see Passing additional arguments using scipy.optimize.curve_fit? )

    Working example :

    import numpy as np
    import random
    from scipy.optimize import curve_fit
    from matplotlib import pyplot as plt
    import math
    
    def funToFit(x):
        return 0.5+2*x-3*x*x+0.2*x*x*x+0.1*x*x*x*x
    
    
    xx=[random.uniform(1,5) for i in range(30)]
    yy=[funToFit(xx[i])+random.uniform(-1,1) for i in range(len(xx))]
    
    
    a=np.zeros(5)
    def make_func(numarg):
        def func(x,*a):
            ng=numarg
            v=0
            for i in range(ng):
                v+=a[i]*np.power(x,i)
            return v
        return func
    
    leastsq, covar = curve_fit(make_func(len(a)),xx,yy,tuple(a))
    print leastsq
    def fFited(x):
        v=0
        for i in range(len(leastsq)):
            v+=leastsq[i]*np.power(x,i)
        return v
    
    
    xfine=np.linspace(1,5,200)
    plt.plot(xx,yy,".")
    plt.plot(xfine,fFited(xfine))
    plt.show()
    

提交回复
热议问题