Python 一边带可变边界条件的正方形上积分微分方程的求解(scipy.optimize)

Python 一边带可变边界条件的正方形上积分微分方程的求解(scipy.optimize),python,optimization,scipy,solver,boundary,Python,Optimization,Scipy,Solver,Boundary,我试图通过在正方形的一边引入一个可变的边界条件,用Scipy解一个正方形上的非线性积分微分方程 给出了如何求解该方程的示例代码,但每条边上都有一组4个常量边界条件:Px,1=1和p=0,在[0,1]x[0,1]的任何其他边界上。这意味着其他3条边的顶部边缘边界条件为P=1和P=0 import numpy as np from scipy.optimize import newton_krylov from numpy import cosh, zeros_like, mgrid, zeros

我试图通过在正方形的一边引入一个可变的边界条件,用Scipy解一个正方形上的非线性积分微分方程

给出了如何求解该方程的示例代码,但每条边上都有一组4个常量边界条件:Px,1=1和p=0,在[0,1]x[0,1]的任何其他边界上。这意味着其他3条边的顶部边缘边界条件为P=1和P=0

import numpy as np
from scipy.optimize import newton_krylov
from numpy import cosh, zeros_like, mgrid, zeros

# Defining 2D grid of 75x75 dots :
nx, ny = 75, 75
# Defining grid steps 
hx, hy = 1./(nx-1), 1./(ny-1)
# Boundary Conditions for function P(x,y) over square [0,1]x[0,1]
P_left, P_right = 0, 0                        # P(1,y)=0 and P(0,y)=0
P_top, P_bottom = 1, 0                        # P(x,1)=1 and P(x,0)=0

# Defining integro-differential equation for function P(x,y) 
def residual(P):
    d2x = zeros_like(P)
    d2y = zeros_like(P)
    # Central Difference Approximation
    d2x[1:-1] = (P[2:]   - 2*P[1:-1] + P[:-2]) / hx/hx
    d2x[0]    = (P[1]    - 2*P[0]    + P_left)/hx/hx
    d2x[-1]   = (P_right - 2*P[-1]   + P[-2])/hx/hx
    d2y[:,1:-1] = (P[:,2:] - 2*P[:,1:-1] + P[:,:-2])/hy/hy
    d2y[:,0]    = (P[:,1]  - 2*P[:,0]    + P_bottom)/hy/hy
    d2y[:,-1]   = (P_top   - 2*P[:,-1]   + P[:,-2])/hy/hy
    # expression of the integro-differential equation
    return d2x + d2y - 10*cosh(P).mean()**2

# Defining a guess starting solution
guess = zeros((nx, ny), float)
# Iterating to find the solution 
sol = newton_krylov(residual, guess, method='lgmres', verbose=1)
print('Residual: %g' % abs(residual(sol)).max())
# visualize the solution
import matplotlib.pyplot as plt
x, y = mgrid[0:1:(nx*1j), 0:1:(ny*1j)]
plt.pcolor(x, y, sol)
plt.colorbar()
plt.show()
我想解决同样的问题,在上边缘有一个可变的边界条件,即:

P_top = P(x,1) = 1/(0.5 - abs(x))
这意味着p将在正方形的上边缘具有不同的值,如下图所示:

我试图用下面代码第11行所示的公式插入p_top,但收到一条错误消息,变量“x”未定义。所以,我想请你们帮忙,如何在残差中正确定义这个P_-top变量边界条件

提前感谢,