有限差分方法、有限元方法、有限体积方法

I.三者简介

有限差分方法(Finite Difference Methods)是数值模拟偏微分方程最早采用的方法,至今仍被广泛运用。该方法包括区域剖分和差商代替导数两个过程。具体地,首先将求解区域划分为差分网格,用有限个网格节点代替连续的求解区域。其次,利用Taylor级数展开等方法将偏微分方程中的导数项在网格节点上用函数值的差商代替来进行离散,从而建立以网格节点上的值为未知量的代数方程组。该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念直观,表达简单,是发展较早且比较成熟的数值方法。差商代替导数后的格式称为有限差分格式,从格式的精度来考虑,有一阶格式、二阶格式和高阶格式。从差分的空间离散形式来考虑,有中心格式和迎风格式。对于瞬态方程,考虑时间方向的离散,有显格式、隐格式、交替显隐格式等。目前常见的差分格式,主要是以上几种格式的组合,不同的组合构成不同的差分格式。差分方法主要适用于结构网格,网格的步长一般根据问题模型和Courant稳定条件来决定。

有限元方法(Finite Element Methods)的基础是变分原理和分片多项式插值。该方法的构造过程包括以下三个步骤。首先,利用变分原理得到偏微分方程的弱形式(利用泛函分析的知识将求解空间扩大)。其次,将计算区域划分为有限个互不重叠的单元(三角形、四边形、四面体、六面体等)。再次,在每个单元内选择合适的节点作为求解函数的插值点,将偏微分方程中的变量改写成由各变量或其导数的节点值与所选用的分片插值基函数组成的线性表达式,得到微分方程的离散形式。利用插值函数的局部支集性质及数值积分可以得到未知量的代数方程组。有限元方法有较完善的理论基础,具有求解区域灵活(复杂区域)、单元类型灵活(适于结构网格和非结构网格)、程序代码通用(数值模拟软件多数基于有限元方法)等特点。有限元方法最早应用于结构力学,随着计算机的发展已经渗透到计算物理、流体力学等各个数值模拟领域的广泛应用中。

根据所采用的检验函数(虚位移函数)和插值函数的不同,有限元方法也分为多种计算格式。从检验函数的选择来说,有配置法、最小二乘法和伽辽金法,从计算单元网格的形状来划分,有三角形网格、四边形网格和多边形网格,从插值函数的精度来划分,又分为线性插值函数和高次插值函数等。不同的组合同样构成不同的有限元计算格式。对于有限元方法,其基本思路和解题步骤可归纳为

(1)建立积分方程,根据变分原理或方程余量与检验函数正交化原理,建立与微分方程初边值问题等价的积分表达式,这是有限元法的出发点。

(2)区域单元剖分,根据求解区域的形状及实际问题的物理特点,将区域剖分为若干相互连接、不重叠的单元。区域单元划分是采用有限元方法的前处理过程,要给出计算单元和节点进行编号相互之间的关系、节点的位置坐标,同时还需要列出问题的自然边界和本质边界的节点序号和相应的边界值。

(3)确定单元基函数,根据单元中节点数目及对近似解精度的要求,选择满足一定插值条件的插值函数作为单元基函数。有限元方法中的基函数是在单元中选取的,由于各单元 具有规则的几何形状,在选取基函数时可遵循一定的法则。

(4)单元分析:将各个单元中的求解函数用单元基函数的线性组合表达式进行逼近;再将近似函数代入积分方程,并对单元区域进行积分,可获得含有待定系数(即单元中各节点的函数值)的代数方程组,称为单元有限元方程。

(5)总体合成:在得出单元有限元方程之后,将区域中所有单元有限元方程按一定法则进行累加,形成总体有限元方程。

(6)边界条件的处理:一般边界条件有三种形式,分为本质边界条件(Dirichlet边界条件 )、自然边界条件(Neumann边界条件)、混合边界条件(Cauchy边界条件)。对于自然边界条件,一般在积分表达式中可自动得到满足。对于本质边界条件和混合边界条件,需按一定法 则对总体有限元方程进行修正满足。

(7)解有限元方程:根据边界条件修正的总体有限元方程组,采用适当的代数方程组求解器,可求得各节点的函数值。

有限体积法(Finite Volume Methods)又称为控制体积法。其基本思路是:将计算区域划分为一系列互不重叠的控制体,并使每个网格点周围有一个控制体;将待求解的微分方程对每一个控制体积积分,便得出一组离散方程。该方法的未知量为网格点上的函数值。为了求出控制体积的积分,须假定函数值在网格点控制体边界上的变化规律。从积分区域的选取方法看来,有限体积法属于有限元方法中检验函数取分片常数插值的子区域法;从未知量的近似方法看来,有限体积法属于采用局部近似的离散方法。

有限体积法的基本思路易于理解,能够保持物理量在控制体上的守恒性质,也即离散方程保持了微分方程物理量在控制体满足某种守恒原理的物理意义。这是有限体积法吸引人的优点。此外,在有限体积法中,插值函数只用于计算控制体积的积分,因此可以对微分方程中不同的项采取不同的插值函数。

II.三者各有所长

有限差分方法直观,理论成熟,精度可选。但是不规则区域处理繁琐,虽然网格生成可以使FDM应用于不规则区域,但是对区域的连续性和解的光滑性等要求较高。使用FDM的好处在于易于编程。

有限元方法适合处理复杂区域,精度可选,程序代码具有较强的通用性,适于大规模编程开发和计算。有限体积法适于流体计算,可以应用于非结构网格,适于并行。但是精度最高达到二阶。FVM的优势正逐渐显现出来,FVM在应力应变、高频电磁场方面的特殊的优点正在被人重视。

III.三者区别

FVM和FDM在精度和守恒性方面的差别

FVM由积分方程离散,而FDM方法由微分方程直接离散,前者的精度不但取决于积分时的精度,还取决于对导数处理时的精度,一般总体最高具有二阶精度;后者的精度不涉及积分,而是借助Taylor展开利用差商代替导数,可以具有较高阶的精度。前者对于守恒型方程保持守恒性质,而后者不一定具有守恒性。

FVM和FEM的区别

有限元在复杂区域的适应性对有限体积是相同的,而有限容积的守恒性,物理概念明显的这些特点,有限元是没有的。但是有限体积方法在精度方面与有限元方法还有些差距。

FEM和FDM的区别

有限元方法在适应复杂求解区域和对解的光滑性要求上要优于有限差分法,但是在编程和实现上,有限差分方法在效率上占有一定的优势。

数值模拟偏微分方程的三种方法介绍相关推荐

  1. 正圆锥体空间方程_数值模拟偏微分方程的三种方法:FDM、FEM及FVM

    偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM).有限元方法(FEM).有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较. 一.有限差分方法 有限差分方法(Finite D ...

  2. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍

    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...

  3. cad画直角命令_在cad中怎么画角度?cad画角度三种方法介绍

    cad是应用最广泛的计算机辅助设计软件,学会使用cad怎么画角度是必不可少的,尤其是对于新手来说,更应该学习.那么在cad中怎么画角度?下面小编就为大家介绍三种cad画角度方法,希望对大家有所帮助! ...

  4. 手机怎么查看已经记住的WiFi密码?手机查看wifi密码三种方法介绍(图文)

    有时候用过的wifi密码手机自动保存了,但在想知道wifi密码是多少,相信很多人都不记得了,或者在使用其他人的WiFi时,密码突然忘记了.怎么办呢?手机怎么查看已经记住的WiFi密码?下面脚本之家小编 ...

  5. html图层透明度,ps图层透明度怎么调整?Photoshop中调整图层透明度的三种方法介绍...

    Photoshop里面怎么调整图层的透明度?作为一个"切图仔",切图的时候,看到总有透明的图层估计是最头痛的事,不知道其他人怎么样,个人却是最怕做透明的样式..扯远了,但确实因为要 ...

  6. linux终端下载notepad,在Linux系统上安装NotePad++的三种方法介绍

    本文介绍在Linux操作系统上安装NotePad++的三种方法,使用Snap.Wine和NotePadQQ.这里要说的是:由于像Wine和Snap软件包这样的工具,在Linux上运行的Notepad+ ...

  7. android 国内 更新方法,手机安卓系统怎么升级 安卓系统更新升级的三种方法介绍...

    最近有网友问小编"安卓系统怎么升级?",针对该问题,笔者也在网上查找了下相关资料,不过并没有找到什么有价值的相关介绍,多数都是介绍如何自动升级.或者下载升级版包等等方法,对于一些常 ...

  8. 平板 刷 linux系统,在Linux系统上安装NotePad++的三种方法介绍

    本文介绍在Linux操作系统上安装NotePad++的三种方法,使用Snap.Wine和NotePadQQ.这里要说的是:由于像Wine和Snap软件包这样的工具,在Linux上运行的Notepad+ ...

  9. vue操作dom元素的三种方法介绍和分析

    相信大家在做项目的时候,肯定会遇到这样的问题:我点击新增按钮,需要弹出个弹框,然后我点击对应的关闭按钮,关闭弹框,但是新增按钮和关闭按钮操作的是另一个元素,所以需要获取dom元素进行操控,那么在vue ...

最新文章

  1. Tensorflow框架是如何支持分布式训练的?
  2. ubtuntu server下的包管理
  3. 记录一下 Linux飞鸽传书 QIpMsg 的下载链接
  4. 涉及CDI和JSF的过期对话的定制错误页面
  5. MySQL优化filler值_MySQL 性能优化神器 Explain 使用分析
  6. php 函数命名 特殊字符,php 特殊字符处理函数
  7. php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
  8. 推荐我们在B站的生信程序基础课
  9. 多线程编程—线程池的实现
  10. 【java】如何在IDEA 中查看 Class文件的汇编
  11. 【转】其实Unix很简单
  12. electron webview 页面加载事件顺序
  13. JavaScript是什么?看着一篇就够了
  14. linux下的几种文本去重方法
  15. 浏览器内核学习笔记一
  16. 2.Smali的基础语法
  17. PCIE Capability ID
  18. python随笔01(robotframework自动化)
  19. 纱织小姐雅典娜_用雅典娜分析巧克力
  20. 2020知道答案C语言,C语言及逆向2020知到答案

热门文章

  1. 可微和可导的关系,全微分、偏微分、偏导数
  2. 安规标准确定爬电距离和电气间隙
  3. webrtc 带宽估计
  4. git设置用户名和邮箱地址
  5. 通过深度学习实现安全帽佩戴的检测
  6. dlib人脸对齐(python)
  7. C语言数组名、数组名取地址、数组首元素地址之间的关系
  8. 数据库事务的概念和ACID特性!你懂了吗,小老弟?!
  9. 《我在未来等你》的读书笔记和读后感作文2900字
  10. 使用豆瓣api查找本地电影评分来决定看什么电影