Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二维不动点的数值求解_Python_Numpy_Scipy - Fatal编程技术网

Python 二维不动点的数值求解

Python 二维不动点的数值求解,python,numpy,scipy,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\u l,u\u h]和J=[J\u l,J\u h]。然后,可以通过两个向量值函数u,J,来定义由前面方程定义的系统的稳态: u_0 = [u_l_0, u_h_0]: u_0 = u(J(u_0)) 类似地,我需要检查J(u(J_0))=J 这是一个概念性的问题,这些函数背后的代码并不能真正

我有以下四个功能

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\u l,u\u h]
J=[J\u l,J\u 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
#为测试值u创建网格
u=np.linspace(0.0001,0.3200)
GridUL,GridUH=np.meshgrid(u,u,index='ij')
#J=[JL,JH]就是我之前所说的“J”
JL=jsteadstate(GridUL,GridUH,thisType='low')
JH=jsteadestate(GridUL,GridUH,thisType='high')
UL2,UH2=uSteadyState(JL,参数),uSteadyState(JH,参数)
#检查两个变量中的固定点
误差=1e-3
固定点L=abs(UL2网格)
如何有效地检查
UL2
UH2
GridUL
GridUH
以找到固定点(复数)

到目前为止,我的方法在很大程度上取决于尝试和错误以及网格大小
scipy.optimize.root
似乎专注于简单的根,而不是更复杂的定点问题。我可以把定点问题作为一个根本问题来写,但我认为这是非常低效的。我应该如何进行此操作?

您可以尝试使用:

但是请注意,这并不将
x
y
限制在域
(0.0001,
0.3)
,因此这可能会或可能不会找到固定点,这取决于以下情况: 函数的平滑度
JSteadyState
uSteadyState
以及
最初的猜测。

我遇到了许多寻找不动点的多维问题。。。我用
根查找器解决了所有问题。查找固定点是一个根查找问题。因此,我建议您不要尝试重新发明轮子,而是尝试不同的
根解算器
(并非所有根解算器都适用于特定问题)。谢谢。您可能需要更改为
返回np.array([UL2,UH2])
。此函数似乎只支持查找一个固定点:“查找函数的固定点”。我将如何继续寻找其他的,特别是非稳定的?我不知道任何现成的方法来寻找不稳定的不动点;这似乎需要对特定的动力系统进行数学分析。在我到目前为止所处的1D中,我可以通过绘制
J(u)
u(J)
找到这些。我想2D真的让生活很痛苦。
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)