二维固定点的数值求解

Numerically solving for fixed points in 2D

我有以下四个功能

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

如何有效地 我检查 UL2UH2GridULGridUH 以找到 定点(复数)?

到目前为止,我的方法在很大程度上取决于试错法和网格大小。 scipy.optimize.root 似乎专注于简单的根而不是更复杂的不动点问题。我可以将不动点问题写成根问题,但我想这会非常低效。我应该如何处理这个问题?

您可以尝试使用 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)

但是请注意,这不会将 xy 限制在域 (0.0001, 0.3) 内,因此这可能会或可能不会找到固定点,具体取决于诸如 你的函数 JSteadyStateuSteadyState 的平滑度和你的 初步猜测。