【发布时间】:2018-06-29 04:39:03
【问题描述】:
我正在使用 scioy.optimize.curve_fit 在 Python 中解决优化问题。 curve_fit 函数将输入作为 curve_fit(f, xdata, ydata, ...),其中 f 可调用,是模型函数 f(x, ...)。它必须将自变量作为第一个参数,并将适合的参数作为单独的剩余参数。
但是,就我而言,其余参数是可变的。例如,f 可以是 f = fun(indepent_var, a, b, c, d) 或 f = fun(indepent_var, a, c, d)。
f 的实际参数由用户在解决优化问题时定义。例如,一个用户可能想要使用 a、b、c、d 作为参数,而另一个用户想要使用 a、c、d,而第三个用户可能使用 b、c。然后,我的问题是如何在f 中设置变量参数,然后用户可以配置自己的参数?
def func(data, a, b, c, d):
return a * np.exp(-b * data) + c
#def func(data, a, c, d):
# return a * np.exp(-c * x)
popt, pcov = curve_fit(func, xdata, ydata)
"config_1.ini"
params_to_be_optimized = a, b, c, d
"config_2.ini"
params_to_be_optimized = a, c, d
我正在尝试做这样的事情:
def func(data, **kwards):
a = kwargs['a'] if a in kwargs else 0
...
return ...
popt, pcov = curve_fit(lambda(...), xdata, ydata)
但我不知道如何解决这个问题。我想lambda 函数可能有效,但谁能给我一个例子?
【问题讨论】:
-
函数f的一个非常例子:如果用户将参数定义为a,b,c,那么def f(data,a,b,c):返回a * data - b - c 但是如果用户定义参数为 b, c, d,则 def f(data, b, c, d): return data / b + c * d 以此类推...
-
如果你提供一个最小的例子,你会得到更精确的帮助:stackoverflow.com/help/mcve
-
stackoverflow.com/a/7165877 这显示了如何使用
scipy.optimize,还包括设置初始参数猜测
标签: python scipy variadic-functions curve-fitting