首页 > 编程知识 正文

保继光朱汝金偏微分方程(偏微分方程入门)

时间:2023-05-03 20:17:40 阅读:91324 作者:3289

【我发送了同名西瓜视频(西瓜视频),但本文只是视频中的Markdown文件的内容,不包括视频中的说明】

如果和我一样想在windows10上安装FEniCS,建议使用windows10wsl2Ubuntu。

FEniCS入门讲解(求解泊松方程)

FEniCS是一个基于有限元法求解偏微分方程的开源计算平台。

泊松方程将泊松方程转换为(弱)变分形式求解微分方程的边值问题(一维泊松方程) )二维泊松方程ParaView )求解

泊松方程

的第一个例子自然会求解有名的泊松方程。

将泊松方程转化成(弱)变分形式

首先,对泊松方程的两边乘以测试函数,然后积分到整个区域。

这里需要说明启发式函数和测试函数的概念。

测试函数,定义:

函数,定义:

然后,变换上面的变分方程式

左侧为双线性形式,右侧为线性形式:

于是得到标准的变分问题:求,满足

这就是与前面的泊松问题等价的变分问题。

求解微分方程边值问题(1维泊松方程)

做好了之前的准备,可以写代码求解了。

第一步:创建用于解析域的网格并定义函数空间

从域导入*

# #单元数

nel=20

# #左右端点

xmin=0

xmax=1

# #启发式/测试函数的多项式阶

p=2

# #创建网格

mesh=间隔mesh (nel,xmin,xmax ) )。

# #使用连续Galerkin定义函数空间

# #各单元上的p次(拉格朗日)函数

v=函数空间(mesh,' CG ',p )步骤2 :定义提供的表达式

u0=常数(0) ) )。

f=恒定(-1 ) ) )。

g=常数(1)阶Dirichlet边界条件的建立与应用

(Dirichlet边界的定义(x=0() ) () ) () ) () ) ) ) ) ) )。

defDirichlet_boundary(x,on_boundary ) :

返回边界数据库(x0)域深度

将Dirichlet条件应用于# # #点x=0

BC=直接广播(v,u0,直接广播)步骤4 :定义变量问题

u=三重函数(v ) ) )

v=测试函数(v ) )

a=inner (等级(v (u ),等级) v ) *dx

L=f*v*dx g*v*ds步骤5 :求解并绘图

# #求解

u=函数(v )

解决(a==l,u,bc ) ) ) ) ) ) ) ) ) )。

# #绘图

plot(u )

求解2维泊松方程

(1个单位矩阵(Dirichlet边界) Neumann边界)法线指南数)源项)也同样地分为5个阶段进行求解

从域导入*

第一步:创建用于解析域的网格并定义函数空间

mesh=unitsquaremesh (32,32 ) ) )。

v=函数空间(消息,'洛杉矶格兰',1 ) )。

步骤2 :定义提供的公式

u0=恒定(0.0) (等于) ) (等于) ) ) ) ) ) ) )。

f=表达式(' 10 *表达式(-(点) x [0]-0.5,2 )点) x [1]-0.5,2 ) )/0.02 ),深度=2) )。

g=表达式(sin )5*x[0];深度=2() ) ) ) ) ) ) ) ) ) )到) ) ) ) ) ) )但) ) ) ) ) ) ) ) ) ) ) ) ) )

步骤3(Dirichlet )边界条件的建立和应用

德国边界(x ) :

returnx [0]域名_博锐1.0 -域名_博锐

BC=直径广播(v,u0,边界) ) ) ) ) ) ) ) ) ) ) ) ) )。

步骤4 :定义变分问题

u=三重函数(v ) ) )

v=测试函数(v ) )

a=inner (地(v (u ),地) v ) *dx

L=f*v*dx g*v*ds

步骤5 :解决并绘图

u=函数(v )

解决(a==l,u,bc ) ) ) ) ) ) ) ) ) )。

plot(u )

ParaView中查看解

#以VTK格式保存解

文件=文件(poisson.PVD ) ) )。

文件u【结束】

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。