Python解偏微分方程

2023-11-16

− ∇ 2 u ( x ) = f ( x ) , x  in  Ω , ( 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 ) = u D ( x ) , x  on  ∂ Ω , ( 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 Ω的边界。 泊松问题,包括偏微分方程 − ∇ 2 u = f -\nabla^{2} u=f 2u=f ∂ Ω \partial \Omega Ω 上的边界条件 u = u D u=u_{\mathrm{D}} u=uD,是边界值问题的一个例子,在开始使用 FEniCS 解决它之前必须精确说明。

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

− ∂ 2 u ∂ x 2 − ∂ 2 u ∂ y 2 = f ( x , y ) , ( 3 ) -\frac{\partial^{2} u}{\partial x^{2}}-\frac{\partial^{2} u}{\partial y^{2}}=f(x, y),\qquad(3) x22uy22u=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 乘以函数 v v v,在域 Ω \Omega Ω 上对所得方程进行积分,并通过具有二阶导数的部分项进行积分。 乘以 PDE 的函数 v v v 称为测试函数。 要逼近的未知函数 u u u 称为试验函数。 术语试验和测试功能也用于 FEniCS 程序。 试验和测试函数属于某些所谓的函数空间,这些函数空间指定了函数的属性

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

− ∫ Ω ( ∇ 2 u ) v   d x = ∫ Ω f v   d x , ( 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 表示在 Ω 边界上积分的微分元素。

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

− ∫ Ω ( ∇ 2 u ) v   d x = ∫ Ω ∇ u ⋅ ∇ v   d x − ∫ ∂ Ω ∂ u ∂ n v   d s , ( 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=Ωuv dxΩnuv ds,(5)

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

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

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

抽象有限元变分公式

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

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)vV^,(9)

对于泊松方程,我们有:

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

L ( v ) = ∫ Ω f v   d x , ( 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)
...

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python解偏微分方程 的相关文章

随机推荐

  • [docker]笔记-基础配置

    1 docker启动和设置开机启动 root localhost systemctl start docker root localhost systemctl enable docker 2 更换docker镜像网站 默认docker镜像
  • SpringSecurity学习笔记一

    SpringSecurity学习笔记 一 Java配置 Web安全 创建Security过滤器 通过springSecurityFilterChain负责所有安全过滤请求 基本例子 EnableWebSecurity public clas
  • Android 中SharedPreferences的详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 SharedPreferences 首选项 介绍 存储软件的配置信息 存储的信息 很小 简单的数据 比如 自动登录 记住密码 小说a
  • 入门级详细USB移植教程——致正在为USB烦恼的朋友

    同上一篇MPU6050一样 我还是写一篇关于USB的帖子 在圈圈等玩USB的大神面前 我掌握的USB知识实在是九牛一毛 所以这篇帖子加上了入门级的修饰语 写这篇帖子主要是为了那些想快速开发USB的人 至于想深入了解USB协议 可以先学完我这
  • 游戏开发unity编辑器扩展知识系列:AssetDatabase.SaveAssets

    插眼 总结 在Editor运行c 脚本时 可以修改资源 这时如果想要保存修改 可以调用AssetDatabase SaveAssets 参考 官方文档 https docs unity3d com ScriptReference Asset
  • 记一次ES线上异常

    记一次ES线上异常解决过程 周六线上es报警es not green 由于没有带笔记本回家并且考虑到集群容量本身就很紧张以及最近的读写压力确实很大 并没有多余的机器可以加入集群 觉得应该不会是什么大问题 就没有太多在意 周末去上班打开电脑一
  • 如何调用百度接口来实现全国的撒点效果(在这里把百度接口的文档荡到本地了)

  • LogisticRegression用户流失预测模型初探【推荐】

    什么是逻辑回归 Logistic回归与多重线性回归实际上有很多相同之处 最大的区别就在于它们的因变量不同 其他的基本都差不多 正是因为如此 这两种回归可以归于同一个家族 即广义线性模型 generalizedlinear model 这一家
  • 「c++小学期」实验题目及代码

    面向对象编程的C 和平时做题用的C 还是有差距的 实验的题目都是小题目 就都做一下吧 实验一 简单C 程序设计 1 猜价格游戏 编写C 程序完成以下功能 1 假定有一件商品 程序用随机数指定该商品的价格 1 1000的整数 2 提示用户猜价
  • 【AI with ML】第 8 章 :使用 TensorFlow 创建文本

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • styled-components设置组件属性

    问题 最近在试着用react做一个音乐播放器 在这之前其实并不了解styled components 但由于使用css in js并且想实现hover效果 百度各种解决方案后发现了styled components这个好东西 如果你看到了这
  • RGMII接口(KSZ9031)

    概述 RGMII的时序是时钟双沿采样 在默认的RGMII时序中 时钟 RXC TXC 边沿与数据边沿 TXD RXD TX CTL RX CTL 的对齐 因此 FPGA想要正确收发数据 需要对TXC或RXC进行适当的延迟 由于最高时钟为12
  • 二手房交易差额款需要一次交清?

    在签订购房合同的时候 房东要求添加条款 在房产过户当日收取差额款 差额款应该一次性给他 还是可以按比例付 拿到房产证后付清 他给我写收条的时候 我应该注意什么 找法网小编为您详细介绍 网友咨询 我通过本地的老牌中介买房的 在签订购房合同的时
  • 时间序列数据特征提取TsFresh

    文章目录 1 源码和数据地址 2 TsFresh安装 3 代码部分说明 3 1 数据下载 3 2 从文件读取数据 4 特征拓展 4 1 默认参数 4 2 ComprehensiveFCParameters参数 4 3 EfficientFC
  • 电子工程师的自我修养 - OD输出

    开漏输出 Open Drain Output OD门 漏极开路 Open Drain 电路特点 利用外部电路的驱动能力 减少IC内部的驱动 可以将多个开漏输出的pin连接到一条线上 通过一个上拉电阻 在不增加任何器件的情况下 形成 线与 关
  • 使用myisamchK 命令修复数据

    使用myisamchk 命令修复表 myisam使用程序可以用来获得有关你的数据库表的统计信息 检查 修复 优化他们 命令格式 myisamchk option tables frm 常用的检查选项 information i 打印所检察标
  • 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1 实验平台 ALIENTEK NANO STM32F411 V1开发板 2 摘自 正点原子STM32F4 开发指南 HAL 库版 关注官方微信号公众号 获取更多资料 正点原子 第三章 MDK5 软件入门 本章将向大家介绍 MDK5 软件和
  • Blazor组件自做四 : 使用JS隔离封装signature_pad签名组件

    运行截图 演示地址 响应式 感谢szimek写的棒棒的signature pad js项目 来源 https github com szimek signature pad 正式开始 1 在文件夹wwwroot lib 添加signatur
  • python3+requests+unittest实战系列【一】

    1 环境准备 python3 pycharm编辑器 2 框架目录展示 该套代码只是简单入门 有兴趣的可以不断后期完善 1 run py主运行文件 运行之后可以生成相应的测试报告 并以邮件形式发送 2 report文件夹存放测试结果报告 3
  • Python解偏微分方程

    2 u x