在2D中数值求解固定点

时间:2015-04-18 21:21:19

标签: python numpy scipy

我有以下四个功能

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]。然后可以通过两个向量值函数uJ来定义由前面等式定义的系统的静止状态:

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似乎专注于简单的根,而不是更复杂的定点问题。我可以将定点问题写成根本问题,但我想这会非常低效。我该如何进步呢?

1 个答案:

答案 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)

但请注意,这并不会将xy限制为域(0.0001, 0.3),因此这可能会也可能不会找到固定点,具体取决于 您的职能JSteadyStateuSteadyState以及您的职能的流畅程度 初步猜测。