我有以下四个功能
u_h = u_h(J_l, J_h)
u_l = u_l(J_l, J_h)
J_l = J_l(u_h, u_l)
J_h = J_h(u_h, u_l)
如果您愿意,请u = [u_l, u_h]
和J = [J_l, J_h]
。然后可以通过两个向量值函数u
,J
来定义由前面等式定义的系统的静止状态:
u_0 = [u_l_0, u_h_0]:
u_0 = u(J(u_0))
同样,我需要检查J(u(J_0)) = J
。
这是一个概念性的问题,这些函数背后的代码实际上并不是可以简化的,因此有必要建立一个合理的工作示例。
这是我到目前为止所做的事情:
# create a grid for test-values u
u = np.linspace(0.0001, 0.3, 200)
GridUL, GridUH = np.meshgrid(u, u, indexing='ij')
# J = [JL, JH] would be what I called "J" previously
JL = JSteadyState(GridUL, GridUH, thisType='low')
JH = JSteadyState(GridUL, GridUH, thisType='high')
UL2, UH2 = uSteadyState(JL, Param), uSteadyState(JH, Param)
# check for fixed points in both variables
err = 1e-3
fixedPointL = abs(UL2-GridUL) < err
fixedPointH = abs(UH2-GridUH) < err
fixedPointH & fixedPointH
如何有效我检查UL2
,UH2
对GridUL
,GridUH
查找固定点 (复数)?
到目前为止,我的方法很大程度上取决于尝试错误和网格大小。 scipy.optimize.root
似乎专注于简单的根,而不是更复杂的定点问题。我可以将定点问题写成根本问题,但我想这会非常低效。我该如何进步呢?
答案 0 :(得分:2)
您可以尝试使用scipy.optimize.fixed_point:
import scipy.optimize as optimize
def func(x):
x0, x1 = x
# J = [JL, JH] would be what I called "J" previously
JL = JSteadyState(x0, x1, thisType='low')
JH = JSteadyState(x0, x1, thisType='high')
UL2 = uSteadyState(JL, Param)
UH2 = uSteadyState(JH, Param)
return np.array([UL2, UH2])
err = 1e-3
guess = [0.1, 0.1]
fixedPointL, fixedPointH = optimize.fixed_point(func, guess, xtol=err)
但请注意,这并不会将x
和y
限制为域(0.0001,
0.3)
,因此这可能会也可能不会找到固定点,具体取决于
您的职能JSteadyState
和uSteadyState
以及您的职能的流畅程度
初步猜测。