fealpy 介绍
本文程序部分使用了湘潭大学魏老师的有限元分析python程序包,下面给出地址。FEALPy 帮助与安装 · 魏华祎的个人网站www.weihuayi.cnweihuayi/fealpygithub.com
一般椭圆型偏微分方程的求解
对如下椭圆形偏微分方程构造一个有真解模型的例子,用
次元进行求解,画出误差阶,并输出误差表格.
求解区域
,
取真解为
. 则有
定义 PDE
import numpy as np
from fealpy.decorator import cartesian, barycentric
class elliptic_example1:
"""
The class which define the pde.
@author: chtld
@date: 20200730
"""
def __init__(self):
pass
@property
def domain(self):
return np.array([0, 1, 0, 1])
@cartesian
def source(self, p):
x = p[..., 0]
y = p[..., 1]
pi = np.pi
val = (12 * pi ** 2 + 1 + x ** 2 + y ** 2) * np.cos(pi * x) * np.cos(pi * y) \
+ 2 * pi ** 2 * np.sin(pi * x) * np.sin(pi * y) \
- pi * np.sin(pi * x) * np.cos(pi * y) - pi * np.cos(pi * x) * np.sin(pi * y)
return val
@cartesian
def exact_solution(self, p):
x = p[..., 0]
y = p[..., 1]
pi = np.pi
val = np.cos(pi * x) * np.cos(pi * y)
return val
@cartesian
def gradient(self, p):
x = p[..., 0]
y = p[..., 1]
pi = np.pi
val = np.zeros(p.shape, dtype = np.float64)
val[..., 0] = -pi * np.sin(pi * x) * np.cos(pi * y)
val[..., 1] = -pi * np.cos(pi * x) * np.sin(pi * y)
return val
@cartesian
def flux(self, p):
return -self.gradient(p)
@cartesian
def dirichlet(self, p):
return self.exact_solution(p)
@cartesian
def diffusion_coefficient(self, p):
x = p[..., 0]
y = p[..., 1]
return np.array([[10.0 * x * y / x / y, -1.0 * x * y / x / y], [-1.0 * x * y / x / y, 2.0 * x * y / x / y]], dtype=np.float64)
@cartesian
def convection_coefficient(self, p):
x = p[..., 0]
y = p[..., 1]
return np.array([1.0 * x * y / x / y, 1.0 * x * y / x / y], dtype=np.float64)
@cartesian
def reaction_coefficient(self, p):
x = p[..., 0]
y = p[..., 1]
return 1 + x**2 + y**2
弱形式
代数系统
其中