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解偏微分方程 的相关文章

  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate

随机推荐

  • [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