问题是,我试图为我的目的设计拟合程序,并希望使用scipy的差分进化算法作为初始值的一般估计,然后将用于LM算法以更好地拟合.我想用DE最小化的函数是分析定义的非线性函数和一些实验值之间的最小平方.我卡住的地方是功能设计.正如它在scipy引用中所述:" 函数必须采用 f(x,*args)形式,其中x是1-D数组形式的参数,args是完全指定所需的任何其他固定参数的元组功能 "
有一个丑陋的代码示例,我为了说明目的而编写:
def func(x, *args):
"""args[0] = x
args[1] = y"""
result = 0
for i in range(len(args[0][0])):
result += (x[0]*(args[0][0][i]**2) + x[1]*(args[0][0][i]) + x[2] - args[0][1][i])**2
return result**0.5
if __name__ == '__main__':
bounds = [(1.5, 0.5), (-0.3, 0.3), (0.1, -0.1)]
x = [0,1,2,3,4]
y = [i**2 for i in x]
args = (x, y)
result = differential_evolution(func, bounds, args=args)
print(func(bounds, args))
Run Code Online (Sandbox Code Playgroud)
我想将原始数据作为元组提供给函数,但似乎不是它的假设,因为解释器对函数不满意.问题应该很容易解决,但我真的很沮丧,所以建议将非常感激.