我正在尝试编写一个简化/组合这些函数的函数:
def func0(x, a0):
return a0
def func1(x, a0, a1):
return a0 + a1*x
def func2(x, a0, a1, a2):
return a0 + a1*x + a2*x**2
def func3(x, a0, a1, a2, a3):
return a0 + a1*x + a2*x**2 + a3*x**3
变成这样的函数:
def func[n](x,a0,a1,...,an):
return a0*x**0 + a1*x**1 + a2*x**2 + ... + an*x**n
这样做的目的是与 scipy.optimize.curve_fit 一起使用,它需要一个可调用函数,其中参数的数量用作要优化的参数的数量。
例如:
from scipy.optimize import curve_fit
from matplotlib.pyplot import *
from numpy import *
def func[n](x, *list( vars()['a'+str(i)] for i in range(0, n+1) ) ):
return sum( vars()['a'+str(i)]*x**i for i in range(0, n+1) )
xdata = array([1,2,3,4])
ydata = array([0.012,1.456,4.673,8.927])
popt,pcov = curve_fit(func[2],xdata,ydata)
plot(xdata, ydata, 'o')
plot(arange(0,5,.1), func[2](arange(0,5,.1),*popt))
show()
如果 func[n] 的极其奇怪的定义有意义
我猜想通过一些创造力和使用 lambda 这是可能的,但我一直无法弄清楚......我希望这是可能的。
在此先感谢您的帮助 :)
PS。知道如何对编码进行颜色编码以方便阅读吗?