• 为什么要使用算符分解方法求解偏微分方程
  • 基本思路
  • 方法的优点
  • 方法的缺点
  • 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方程分解成一系列的子方程,这些子方程是容易求解者有现成的解法
  • 使用一定的算符分解算法,将这些子方程的解连起来,形成最终的解

以一种抽象的方式举例,比如求解柯西问题:

dUdt+A(U)=0,  U(0)=U0

\frac{\mathrm{d}U}{\mathrm{d}t} + \mathcal{A}(U)=0, ~~ U(0)=U_0
其中 A \mathcal{A}代表一些未指明的算符,以后会举例说明(比如在热流传输过程中的对流项、输运项)

使用分离变量法(我自己的理解,有问题大家请指正),可以获得下列形式的解:

U(t)=e−tAU0

U(t) = e^{-t\mathcal{A}}U_0

假设算符能够分解,即 A=A1+A2 \mathcal{A}=\mathcal{A}_1 + \mathcal{A}_2,并且可以很容易的求解下列子问题:

dUdt+Aj(U)=0,  U(0)=U0,   j=1,2

\frac{\mathrm{d}U}{\mathrm{d}t} + \mathcal{A}_j(U)=0, ~~ U(0)=U_0, ~~~ j=1,2
获得的解形式为:

U(t)=e−tAjU0

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(tn+1)=e−ΔtA2e−ΔtA1U(tn)

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是对易算符,即满足

∂A2∂UA1−∂A1∂UA2=0

\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(tn+1)=e−tAjU0=limΔt→0,t=nΔte−ΔtA2e−ΔtA1U(tn)

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相关推荐

  1. 文献学习(part24)--Splitting Methods for Convex Clustering

    学习笔记,仅供参考,有错必纠 文章目录 Splitting Methods for Convex Clustering 摘要 介绍 贡献 解决方案路径的属性 计算聚类路径的算法 Proximal Ma ...

  2. 9.Methods(二)

    4.Operator Overload Methods allow a type to define how operators should manipulate instances of the ...

  3. A-KAZE论文研读

    AKAZE是KAZE的加速版本.KAZE在构建非线性空间的过程中很耗时,在AKAZE中将Fast Explicit Diffusion(FED)加入到金字塔框架可以dramatically speed ...

  4. 【ICCV2019】完整论文列表

    ICCV2019完整论文清单,共1075篇. FaceForensics++: Learning to Detect Manipulated Facial Images Authors:Andreas ...

  5. C++:实现量化N阶导数运算测试实例

    C++:实现量化N阶导数运算测试实例 #include "nthorderderivativeop.hpp" #include "utilities.hpp"# ...

  6. Games201学习笔记3:欧拉视角

    学习教程来自:GAMES201:高级物理引擎实战指南2020 以下大部分图片来自教程PPT,仅作为笔记用于学习和分享,侵删 笔记内容大多为课程内容的翻译和转述,外加一些自己的理解,若有不正确的地方恳请 ...

  7. ADMM算法相关资源

    转载自:https://web.stanford.edu/~boyd/admm.html,版权归原作者所有. ADMM The alternating direction method of mult ...

  8. ICML 2017 paper

    参考链接 icml 2017 acceptedPaper Paperlist Relative Fisher Information and Natural Gradient for Learning ...

  9. ICIP 2009 Papers

    以下转载ICIP 2009录用文章的题目,希望从其中能够发现有用的信息.想来当初也是打算投一个的,可是怎么看总觉得创新不够,后来也就放弃了.争取以后的机会吧. 粗略看了下标题,感觉不愧是一个大会,文章 ...

最新文章

  1. python中类的用法_Python中的类和方法使用举例
  2. 抖音出现大量“三岁用户”,马化腾李彦宏都被还童
  3. 第1章 1.9计算机网络概述--OSI参考模型和网络安全
  4. 如何成为自己所在领域内前1%的顶尖人才? 凤凰科技 09-29 07:42 原标题:如何成为自己所在领域内前1%的顶尖人才? 有时你会觉得,可能你永远也实现自己的梦想。你清楚地知道自己想做什么,但有
  5. 关于MSSQL存储过程中使用游标的一个小例子(学习)
  6. 2017年计算机基础知识答题宝典,2017年全国职称计算机考试答题技巧分享
  7. 4个优化MongoDB的技巧
  8. Ajax链接输出数据库
  9. SQL Server中并行执行计划的基础
  10. 对存在过期 binlog 的 MySQL5.7 添加从服务器
  11. VS语音信号处理(1) C语言读取WAV语音文件文件头数据
  12. Ubuntu 16.04 安装运行 ROVIO odometry
  13. CNN(卷积神经网络)的深度
  14. MySQL求百分比带百分号%
  15. 利用棋盘格图案完成相机标定
  16. MATLAB 之 优劣解距离法(TOPSIS )
  17. 最全 MySQL主从同步与主主同步
  18. 如何查看html的字体,如何检测网页中使用了哪种定义的字体?
  19. 鼠标提示框(第一个JS特效)
  20. Android 9.0 切换系统语言

热门文章

  1. 软交换FreeSWITCH系统概要和源代码初步分析
  2. python 字符串分割_Python 字符串分割的方法
  3. 找一个你仰慕的人,并且向他学习!
  4. 计算机应用技术教程答案2017,计算机应用技术教程各章书后练习答案.docx
  5. 华为ROADS是什么?
  6. JavaScript中的引用函数、调用函数和回调函数
  7. RedisTemplate与zset redis
  8. 八进制转10进制--巧妙方法
  9. 语c专业cos的专业语言,【语c】尝试c下美琴学生党可能回复不及时,非专业语c,可能会...
  10. linux系统添加路由