−∇2u(x)=f(x),xin Ω,(1)-\nabla^{2} u(\boldsymbol{x})=f(\boldsymbol{x}), \quad \boldsymbol{x} \text { in } \Omega,\qquad(1)−∇2u(x)=f(x),x in Ω,(1)

u(x)=uD(x),xon ∂Ω,(2)u(\boldsymbol{x})=u_{\mathrm{D}}(\boldsymbol{x}), \quad \boldsymbol{x} \text { on } \partial \Omega,\qquad(2)u(x)=uD​(x),x on ∂Ω,(2)

其中,u=u(x)u=u(\boldsymbol{x})u=u(x) 为未知函数,f=f(x)f=f(\boldsymbol{x})f=f(x) 为规定函数,∇2\nabla^{2}∇2 为拉普拉斯算子(常写为 ∇\nabla∇),Ω\OmegaΩ 为空间域,∂Ω\partial \Omega∂Ω 为 Ω\OmegaΩ的边界。 泊松问题,包括偏微分方程 −∇2u=f-\nabla^{2} u=f−∇2u=f 和 ∂Ω\partial \Omega∂Ω 上的边界条件 u=uDu=u_{\mathrm{D}}u=uD​,是边界值问题的一个例子,在开始使用 FEniCS 解决它之前必须精确说明。

在坐标为 x 和 y 的二维空间中,我们可以写出泊松方程为

−∂2u∂x2−∂2u∂y2=f(x,y),(3)-\frac{\partial^{2} u}{\partial x^{2}}-\frac{\partial^{2} u}{\partial y^{2}}=f(x, y),\qquad(3)−∂x2∂2u​−∂y2∂2u​=f(x,y),(3)

未知数 u\boldsymbol{u}u 现在是两个变量的函数,u=u(x,y)u=u(x, y)u=u(x,y),在二维域 Ω\OmegaΩ 上定义。

泊松方程出现在许多物理环境中,包括热传导、静电、物质扩散、弹性杆的扭曲、无粘性流体流动和水波。 此外,该方程出现在更复杂的偏微分方程系统的数值分裂策略中,尤其是 Navier-Stokes 方程。

求解边界值问题包括以下步骤:

有限元变分公式

FEniCS 基于有限元方法,它是 PDE 数值解的通用且高效的数学机器。 有限元方法的起点是以变分形式表示的偏微分方程。

将 PDE 转化为变分问题的基本方法是将 PDE 乘以函数 vvv,在域 Ω\OmegaΩ 上对所得方程进行积分,并通过具有二阶导数的部分项进行积分。 乘以 PDE 的函数 vvv 称为测试函数。 要逼近的未知函数 uuu 称为试验函数。 术语试验和测试功能也用于 FEniCS 程序。 试验和测试函数属于某些所谓的函数空间,这些函数空间指定了函数的属性

在本例中,我们首先将泊松方程乘以测试函数 vvv 并在 Ω\OmegaΩ 上积分:

−∫Ω(∇2u)vdx=∫Ωfvdx,(4)-\int_{\Omega}\left(\nabla^{2} u\right) v \mathrm{~d} x=\int_{\Omega} f v \mathrm{~d} x,\qquad(4)−∫Ω​(∇2u)v dx=∫Ω​fv dx,(4)

我们在这里让 dx 表示域 Ω 上积分的微分元素。 我们稍后将让 ds 表示在 Ω 边界上积分的微分元素。

当我们推导出变分公式时,一个常见的规则是我们尽量保持 uuu 和 vvv 的导数的阶数尽可能小。 在这里,我们有 uuu 的二阶空间导数,可以通过应用部分积分技术将其转换为 uuu 和 vvv 的一阶导数。 公式是这样写的

−∫Ω(∇2u)vdx=∫Ω∇u⋅∇vdx−∫∂Ω∂u∂nvds,(5)-\int_{\Omega}\left(\nabla^{2} u\right) v \mathrm{~d} x=\int_{\Omega} \nabla u \cdot \nabla v \mathrm{~d} x-\int_{\partial \Omega} \frac{\partial u}{\partial n} v \mathrm{~d} s,\qquad(5)−∫Ω​(∇2u)v dx=∫Ω​∇u⋅∇v dx−∫∂Ω​∂n∂u​v ds,(5)

其中 ∂u∂n=∇u⋅n\frac{\partial u}{\partial n}=\nabla u \cdot n∂n∂u​=∇u⋅n 是uuu 在边界外法线方向nnn 上的导数。

变分公式的另一个特点是测试函数 vvv 需要在解 uuu 已知的边界部分消失。 在当前问题中,这意味着整个边界 ∂Ω\partial \Omega∂Ω 上的 v=0v=0v=0。 因此,等式(5)右边的第二项消失了。 从等式(4)和(5)可以得出

∫Ω∇u⋅∇vdx=∫Ωfvdx,(6)\int_{\Omega} \nabla u \cdot \nabla v \mathrm{~d} x=\int_{\Omega} f v \mathrm{~d} x,\qquad(6)∫Ω​∇u⋅∇v dx=∫Ω​fv dx,(6)

抽象有限元变分公式

事实证明,为变分问题引入以下规范符号是很方便的:找到 u∈Vu \in Vu∈V 使得

a(u,v)=L(v)∀v∈V^,(9)a(u, v)=L(v) \quad \forall v \in \hat{V},\qquad(9)a(u,v)=L(v)∀v∈V^,(9)

对于泊松方程,我们有:

a(u,v)=∫Ω∇u⋅∇vdx,(10)a(u, v)=\int_{\Omega} \nabla u \cdot \nabla v \mathrm{~d} x,\qquad(10)a(u,v)=∫Ω​∇u⋅∇v dx,(10)

L(v)=∫Ωfvdx,(11)L(v)=\int_{\Omega} f v \mathrm{~d} x,\qquad(11)L(v)=∫Ω​fv dx,(11)

实现代码(Python)

from fenics import *
# Create mesh and define function space
mesh = UnitSquareMesh(8, 8)
V = FunctionSpace(mesh, ’P’, 1)
# Define boundary condition
u_D = Expression(’1 + x[0]*x[0] + 2*x[1]*x[1]’, degree=2)
def boundary(x, on_boundary):
return on_boundary
bc = DirichletBC(V, u_D, boundary)
# Define variational problem
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(-6.0)
a = dot(grad(u), grad(v))*dx
L = f*v*dx
# Compute solution
u = Function(V)
solve(a == L, u, bc)
...

详情参阅 - 亚图跨际

Python解偏微分方程相关推荐

  1. python求解析解,Python解微分方程

    Python解微分方程 微分方程回顾 微分方程:python 解析解(SymPy) 微分方程:python数值解(SciPY) 微分方程组:python数值解 微分方程回顾 微分方程是用来描述某一类函 ...

  2. 偏微分方程数值解法python_基于python求解偏微分方程的有限差分法资料

    基于python求解偏微分方程的有限差分法资料 Computer Era No. 11 2016 0 引言 在数学中, 偏微分方程是包含多变量和它们的偏 导数在内的微分方程.偏微分方程通常被用来求解 ...

  3. python解压zip文件_python-29 python解压压缩包的几种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...

  4. delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  5. python压缩包怎么安装-详解python解压压缩包的五种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...

  6. python 画图_用python解九宫格以及画图

    用python解九宫格的思路很简单,一个是画图部分,用的是turtle库. 演示图 像这个九宫格,首先就是画单独的方型,这个函数要自己写: import turtle as t t.speed(0) ...

  7. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  8. matlab求偏微分方程程序,用MATLAB解偏微分方程.pdf

    用MATLAB解偏微分方程.pdf 年 月 阴 山 学 刊 第 卷 第 期 丫叫 加 用 解偏微分方程 田 兵 包头师范学院 学报编辑部 , 内蒙古 包头 摘 要 讨论 了以 中偏徽分方程工具箱的用法 ...

  9. 奥数 python_奥数赛事china夺得冠军!简单思路用Python解经典数学题

    2019年第60届国际数学奥林匹克竞赛(IMO)结果出炉,奥数大赛中国夺冠 ,中美两国同时以227的总分并列团体冠军.中国队王者归来!6名队员全部摘金,总成绩荣获世界第一! 不要错过 免费学习Pyth ...

最新文章

  1. 如何防止android app被误删除,如何避免手机清理缓存时误删了重要文件【注意事项】...
  2. Cassandra 原理介绍
  3. Windows XP系统八种安全模式揭密
  4. 1.3 Integer类详解
  5. 龘(若出身在新中国我的65047777
  6. 有关 google analytics
  7. LeetCode:67. 二进制求和(python、c++)
  8. 深度学习之RNN、LSTM及正向反向传播原理
  9. 百度和bing的背景肤色图片的保存
  10. 罗技G29方向盘与Unity的连接交互
  11. 流程执行效果如何评估
  12. vue获取tr内td里面所有内容_点击td获取tr的所有值
  13. PTA L1-049 天梯赛座位分配(20分)(python)
  14. 《思维力:高效的系统思维》读书笔记05 - 快速提升你的沟通表达能力
  15. 完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
  16. Redis的安装和卸载--linux环境MobaXterm操作
  17. 图书管理系统之普通用户、超级管理员页面布局(四)
  18. tab切换组件nz-tab
  19. Unity2021接入讯飞语音听写(Android)
  20. bitbucket安装

热门文章

  1. 自助收银、刷脸支付为零售门店升级智慧赋能
  2. 第三章 2. 超复数数系,四元数,八元数,十六元数
  3. 长沙SEO优化:SEO优化关键词如何进行研究和分析以及网站不同阶段的SEO优化排名策略
  4. 揭秘:刘备追得最辛苦的人不是诸葛亮
  5. 我家云折腾之硬改解决硬盘掉盘及休眠
  6. 面试官:分布式锁用Redis好?还是Zookeeper好?
  7. js实现一个既可以当做对象调用也可以当做函数调用的方法
  8. 解决iframe嵌套页面问题
  9. mysql设计(设计省份+城市表)
  10. 一文读懂虚拟机的网络模式