Python 一边带可变边界条件的正方形上积分微分方程的求解(scipy.optimize)
我试图通过在正方形的一边引入一个可变的边界条件,用Scipy解一个正方形上的非线性积分微分方程 给出了如何求解该方程的示例代码,但每条边上都有一组4个常量边界条件:Px,1=1和p=0,在[0,1]x[0,1]的任何其他边界上。这意味着其他3条边的顶部边缘边界条件为P=1和P=0Python 一边带可变边界条件的正方形上积分微分方程的求解(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
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变量边界条件
提前感谢,