我正在尝试解决非线性系统问题。这是玩具问题的代码。
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函数,以便代码是自包含的。它与此问题无关。。
答案 0 :(得分:2)
通常使用scipy
函数,例如root,minimize等
root(func, x0, args=(a, b, c, ...))
需要func
接受:
func(x0, a, b, c, ...)
# do something those arguments
return value
x0
是root
变化的值,a,b,c
是args
值,不会传递给您的函数。根据问题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,))
中的优化器在数值上评估雅可比行列式时,它为固定变量获得零,因此应该保留那些不变量。但是,这可能会导致算法收敛的复杂化。