Operator Splitting Methods in PDEs
- 为什么要使用算符分解方法求解偏微分方程
- 基本思路
- 方法的优点
- 方法的缺点
- First Order Splitting Lie-Trotter Splitting
- First Order Splitting Additive Splitting
求解偏微分方程时,常用的一个方法,今天才开始好好学习一下,做个笔记和大家分享下。
学习的书籍是:Helge Holden et al. (2010):
Splitting Methods for Partial Differential Equations with Rough Solutions
Analysis and MATLAB programs
为什么要使用算符分解方法求解偏微分方程
- 对于许多问题的模拟,最后往往归结为求解偏微分方程。由于现在计算能力的大大提高,求解的偏微分方程越来越复杂
- 求解过程可能涉及到不同的物理过程,这些过程反映在PDE中,表现为不同的数学项。这些不同的项数学上的表现也大不相同,需要做不同的处理,使得不论进行解析求解还是数值模拟都很困难
- 如果求解的方程是一个新类型的PDE,现有的解算方法可能会失效
- 利用算符分解方法可以将一个复杂的PDE分解为一些简单的PDE,这些简单的PDE一般都有现成的算法求解,最后再将这些简单PDE的解综合起来得到最终结果(类似divide and conquer的思想)
基本思路
- 将PDE方程分解成一系列的子方程,这些子方程是容易求解者有现成的解法
- 使用一定的算符分解算法,将这些子方程的解连起来,形成最终的解
以一种抽象的方式举例,比如求解柯西问题:
\frac{\mathrm{d}U}{\mathrm{d}t} + \mathcal{A}(U)=0, ~~ U(0)=U_0
其中 A \mathcal{A}代表一些未指明的算符,以后会举例说明(比如在热流传输过程中的对流项、输运项)
使用分离变量法(我自己的理解,有问题大家请指正),可以获得下列形式的解:
U(t) = e^{-t\mathcal{A}}U_0
假设算符能够分解,即 A=A1+A2 \mathcal{A}=\mathcal{A}_1 + \mathcal{A}_2,并且可以很容易的求解下列子问题:
\frac{\mathrm{d}U}{\mathrm{d}t} + \mathcal{A}_j(U)=0, ~~ U(0)=U_0, ~~~ j=1,2
获得的解形式为:
U(t) = e^{-t\mathcal{A}_j}U_0
考虑最简单的形式,假设 tn=nΔt, n=1,2,... t_n=n\Delta t, ~~ n=1,2,..., Δt>0 \Delta t >0,且足够小,则希望获得如下近似:
U(t_{n+1})=e^{-\Delta t\mathcal{A}_2}e^{-\Delta t\mathcal{A}_1}U(t_n)
假设 A1 \mathcal{A}_1和 A2 \mathcal{A}_2是对易算符,即满足
\frac{\partial \mathcal{A}_2}{\partial U}\mathcal{A}_1 - \frac{\partial \mathcal{A}_1}{\partial U}\mathcal{A}_2 = 0
则 e−ΔtA2e−ΔtA1=e−ΔtA e^{-\Delta t\mathcal{A}_2}e^{-\Delta t\mathcal{A}_1} = e^{-\Delta t\mathcal{A}} , 获得的 U(tn+1) U(t_{n+1})是精确解。
但实际上, A1 \mathcal{A}_1和 A2 \mathcal{A}_2往往是不对易的,此时我们希望
U(t_{n+1})=e^{-t\mathcal{A}_j}U_0 = \lim\limits_{\Delta t \to 0,t=n\Delta t} e^{-\Delta t\mathcal{A}_2}e^{-\Delta t\mathcal{A}_1}U(t_n)
这个就是著名的Lie–Trotter–Kato公式。将解中的算符 etAj e^{t\mathcal{A}_j}替换为数值近似,就获得了求解PDE的数值方法。所有更精确的方法,都是在这个基础上发展得到的。采用不同的数值近似,可以获得不同的方法。
方法的优点
这个方法看上去非常粗糙,但是具有下列优点
- 对子方程,可采用不同的数值或分析方法。在某些情况下,这是非常必要的,可以使求解更简单有效
- 更方便利用一些典型PDE的现有算法,具有更大的灵活性。
- 减少计算过程中对内存的需求,提高求解的稳定性
- 对某些问题,可能是唯一可行的求解方法
- 可以很方便的扩充模拟问题的模型,加入不同的物理过程
方法的缺点
- 如果子系统耦合度非常高,比如所代表的物理过程演化的时间尺度非常短,则算符分解方法可能会失效,分解过程中步长的选取会受到严重限制
- 必须考虑分解造成的误差,以防止出现严重的错误
补充:
对方程: Ut=Ux U_t = U_x,使用前向欧拉公式,对所有的 λ \lambda,解是不稳定的;使用leap-frog方法(2阶时间精度,2阶空间精度),对 λ<1 \lambda ,解是稳定的
然后,不幸的是,对方程: Ut=Uxx U_t = U_{xx},使用前向欧拉公式,对 λ<1/2 \lambda ,解是稳定的;使用leap-frog方法(2x2精度),对所有 λ \lambda,解都是不稳定的
现在我们想解下列方程: Ut=Ux+Uxx U_t = U_x + U_{xx},这两种方法还可以用吗?!!
使用算符分解方法,可以做如下处理:
(1)求解 Ut=Ux U_t = U_x,初值为 U0 U_0,获得解 U1 U_1(可以使用leap-frog)
(2)求解 Ut=Uxx U_t = U_{xx},用上一步的 U1 U_1作为初值,获得解 U2 U_2(可以使用欧拉方法)
(3)将 U2 U_2当作(1)中的初值 U0 U_0,循环执行(1),(2),获得下个步长的解,
END
First Order Splitting: Lie-Trotter Splitting
问题仍然如前面所述。
算法如下:
(1)
∂U(t)∂t=A1U(t),t[tn,tn+1],u(tn)=unsp\frac{\partial U(t)} { \partial t} = \mathcal{A}_1 U(t), t [t^n,t^{n+1}], u(t^n)=u^n_{sp}
(2)
(3)
First Order Splitting: Additive Splitting
————————————-万恶分割线————————————————-
由于时间和水平所限,错误在所难免,大家批判阅读,特此敬告!
Operator Splitting Methods in PDEs相关推荐
- 文献学习(part24)--Splitting Methods for Convex Clustering
学习笔记,仅供参考,有错必纠 文章目录 Splitting Methods for Convex Clustering 摘要 介绍 贡献 解决方案路径的属性 计算聚类路径的算法 Proximal Ma ...
- 9.Methods(二)
4.Operator Overload Methods allow a type to define how operators should manipulate instances of the ...
- A-KAZE论文研读
AKAZE是KAZE的加速版本.KAZE在构建非线性空间的过程中很耗时,在AKAZE中将Fast Explicit Diffusion(FED)加入到金字塔框架可以dramatically speed ...
- 【ICCV2019】完整论文列表
ICCV2019完整论文清单,共1075篇. FaceForensics++: Learning to Detect Manipulated Facial Images Authors:Andreas ...
- C++:实现量化N阶导数运算测试实例
C++:实现量化N阶导数运算测试实例 #include "nthorderderivativeop.hpp" #include "utilities.hpp"# ...
- Games201学习笔记3:欧拉视角
学习教程来自:GAMES201:高级物理引擎实战指南2020 以下大部分图片来自教程PPT,仅作为笔记用于学习和分享,侵删 笔记内容大多为课程内容的翻译和转述,外加一些自己的理解,若有不正确的地方恳请 ...
- ADMM算法相关资源
转载自:https://web.stanford.edu/~boyd/admm.html,版权归原作者所有. ADMM The alternating direction method of mult ...
- ICML 2017 paper
参考链接 icml 2017 acceptedPaper Paperlist Relative Fisher Information and Natural Gradient for Learning ...
- ICIP 2009 Papers
以下转载ICIP 2009录用文章的题目,希望从其中能够发现有用的信息.想来当初也是打算投一个的,可是怎么看总觉得创新不够,后来也就放弃了.争取以后的机会吧. 粗略看了下标题,感觉不愧是一个大会,文章 ...
最新文章
- python中类的用法_Python中的类和方法使用举例
- 抖音出现大量“三岁用户”,马化腾李彦宏都被还童
- 第1章 1.9计算机网络概述--OSI参考模型和网络安全
- 如何成为自己所在领域内前1%的顶尖人才? 凤凰科技 09-29 07:42 原标题:如何成为自己所在领域内前1%的顶尖人才? 有时你会觉得,可能你永远也实现自己的梦想。你清楚地知道自己想做什么,但有
- 关于MSSQL存储过程中使用游标的一个小例子(学习)
- 2017年计算机基础知识答题宝典,2017年全国职称计算机考试答题技巧分享
- 4个优化MongoDB的技巧
- Ajax链接输出数据库
- SQL Server中并行执行计划的基础
- 对存在过期 binlog 的 MySQL5.7 添加从服务器
- VS语音信号处理(1) C语言读取WAV语音文件文件头数据
- Ubuntu 16.04 安装运行 ROVIO odometry
- CNN(卷积神经网络)的深度
- MySQL求百分比带百分号%
- 利用棋盘格图案完成相机标定
- MATLAB 之 优劣解距离法(TOPSIS )
- 最全 MySQL主从同步与主主同步
- 如何查看html的字体,如何检测网页中使用了哪种定义的字体?
- 鼠标提示框(第一个JS特效)
- Android 9.0 切换系统语言