在scipy.optimize.root中传递函数的初始/边界条件作为args参数

时间:2017-07-31 04:33:23

标签: python numpy optimization scipy

我正在尝试解决非线性系统问题。这是玩具问题的代码。

X

问题陈述

目标函数f的参数X[0]=0.5有五个我们正在解决的未知数。我想设置第一个参数,即X[3] = 0.3和第四个参数,即3 unknowns,并求解剩余的args=()。让我们假设这样一个解决方案存在简单,我最初的猜测在某种程度上是一个好的解决方案。

尝试

我知道我应该将这些参数传递给scipy.optimize.root中的args = (X[0]=0.5, X[3]=0.3) init_guess = [0.5,-1,2,0.3,-1] scipy.optimize.root(func,init_guess, args=args) 参数。我试过设置

result = df1.merge(df2, on=['Column1'])

这显然是错误的。

问题?我该如何解决这个问题?。

注意:我添加了flat函数,以便代码是自包含的。它与此问题无关。

2 个答案:

答案 0 :(得分:2)

通常使用scipy函数,例如root,minimize等

root(func, x0, args=(a, b, c, ...))

需要func接受:

func(x0, a, b, c, ...)
    # do something those arguments
    return value

x0root变化的值,a,b,cargs值,不会传递给您的函数。根据问题x0可能是一个数组。 args的性质完全取决于您。

答案 1 :(得分:1)

从您的示例中,我重新构建您想要解决的某个向量 pipeline :exq do plug :accepts, ["html"] plug :fetch_session plug :fetch_flash plug :put_secure_browser_headers plug ExqUi.RouterPlug, namespace: "exq" end scope "/exq", ExqUi do pipe_through :exq forward "/", RouterPlug.Router, :index end 的第二个和第三个组件以及参数x。使用alpha关键字scipy.optmize.root看起来像

args

正如Azat和kazemakase指出的那样,我也不确定你是否真的想使用def func(x_solve, x0, x3): #x_solve.size should be 3 x = np.empty(4) x[0], x[3] = x0, x3 x[1:3] = x_solve[:2] alpha = x_solve[2] ... scipy.optimize.root(func, [-1,2,-1], args=(.5, .3)) ,但scipy.optimize.minimize的用法几乎相同。

编辑:应该可以使用字典作为附加参数来设置一组灵活的固定变量,这些参数指定了这些:

root

这样,当def func(x_solve, fixed): x = x_solve[:-1] # last value is alpha for idx in fixed.keys(): # overwrite fixed entries x[idx] = fixed[idx] alpha = x_solve[-1] # fixed variables, key is the index fixed_vars = {0:.5, 3:.3} # find roots scipy.optimize.root(func, [.5, -1, 2, .3, -1], args=(fixed_vars,)) 中的优化器在数值上评估雅可比行列式时,它为固定变量获得零,因此应该保留那些不变量。但是,这可能会导致算法收敛的复杂化。