﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-健康，快乐，勇敢的宁帅！！-文章分类-数值计算</title><link>http://www.cppblog.com/ningfangli-blog/category/3097.html</link><description>努力、努力、再努力！
没有什么能阻止我对知识的渴望。</description><language>zh-cn</language><lastBuildDate>Sat, 24 Jul 2010 18:44:32 GMT</lastBuildDate><pubDate>Sat, 24 Jul 2010 18:44:32 GMT</pubDate><ttl>60</ttl><item><title>有限差分法.有限元法和有限体积法的区别</title><link>http://www.cppblog.com/ningfangli-blog/articles/121041.html</link><dc:creator>ningfangli</dc:creator><author>ningfangli</author><pubDate>Thu, 22 Jul 2010 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/ningfangli-blog/articles/121041.html</guid><wfw:comment>http://www.cppblog.com/ningfangli-blog/comments/121041.html</wfw:comment><comments>http://www.cppblog.com/ningfangli-blog/articles/121041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ningfangli-blog/comments/commentRss/121041.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ningfangli-blog/services/trackbacks/121041.html</trackback:ping><description><![CDATA[<strong><font color=#ff0000>有限差分法(Finite Difference Method--FDM)</font><br><br>有限差分法</strong>是计算机数值模拟最早采用的方法，至今仍被广泛运用。该方法将 求解域划分为差分网格，用有限个网格节点代替连续的求解域。有限差分法以Taylor级 数展开等方法，把控制方程中的导数用网格节点上的函数值的差商代替进行离散，从而 建立以网格节点上的值为未知数的代数方程组。　<br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该方法是一种直接将微分问题变为代数 问题的近似数值解法，数学概念直观，表达简单，是发展较早且比较成熟的数值方法。对于有限差分格式，从格式的精度来划分，有一阶格式、二阶格式和高阶格式。从差分的空间形式来考虑，可分为中心格式和逆风格式。考虑时间因子的影响，差分格式还可以分为显格式、隐格式、显隐交替格式等。目前常见的差分格式，主要是上述几种形式的组合，不同的组合构成不同的差分格式。差分方法主要适用于有结构网格，网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。</p>
<br>
<p>　　构造差分的方法有多种形式，目前主要采用的是泰勒级数展开方法。其基本的差分表达式主要有三种形式：一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等，其中前两种格式为一阶计算精度，后两种格式为二阶计算精度。通过对时间和空间这几 种不同差分格式的组合，可以组合成不同的差分计算格式。</p>
<br>
<p><strong><font color=#ff0000>有限元法(Finite Element Method--FEM)</font></strong></p>
<br>
<p><strong><font color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color=#000000>有限元法</font></strong>的基础是变分原理和加权余量法，其基本求解思想是把计算域划分为有限个互不重叠的单元，在每个单元内，选择一些合适的节点作为求解函数的插值点，将微分方程中的变量改写成由各变量或其导数的节点值与所选用的插值函数组成的线性表达式，借助于变分原理或加权余量法，将微分方程离散求解。采用不同的权函数和插值函数形式，便构成不同的有限元方法。</p>
<br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有限元方法最早应用于结构力学，后来随着计算机的发展慢慢用于流体力学的数值模拟。在有限元方法中，把计算域离散剖分为有限个互不重叠且相互连接的单元，在每个单元内选择基函数，用单元基函数的线形组合来逼近单元中的真解，整个计算域上总体的基函数可以看为由每个单元基函数组成的，则整个计算域内的解可以看作是由所有单元上的近似解构成。在河道数值模拟中，常见的有限元计算方法是由变分法和加权余量法发展而来的里兹法和伽辽金法、最小二乘法等。根据所采用的权函数和插值函数的不同，有限元方法也分为多种计算格式。从权函数的选择来说，有配置法、矩量法、最小二乘法和伽辽金法，从计算单元网格的形状来划分，有三角形网格、四边形网格和多边形网格，从插值函数的精度来划分，又分为线性插值函数和高次插值函数等。不同的组合同样构成不同的有限元计算格式。对于权函数，伽辽金(Galerkin)法是将权函数取为逼近函数中的基函数；最小二乘法是令权函数等于余量本身，而内积的极小值则为对代求系数的平方误差最小；在配置法中，先在计算域 内选取N个配置点。令近似解在选定的N个配置点上严格满足微分方程，即在配置点上令方程余量为0。插值函数一般由不同次幂的多项式组成，但也有采用三角函数或指数函数组成的乘积表示，但最常用的多项式插值函数。有限元插值函数分为两大类，一类只要求插值多项式本身在插值点取已知值，称为拉格朗日(Lagrange)多项式插值；另一种不仅要求插值多项式本身，还要求它的导数值在插值点取已知值，称为哈密特(Hermite)多项式插值。单元坐标有笛卡尔直角坐标系和无因次自然坐标，有对称和不对称等。常采用的无因次坐标是一种局部坐标系，它的定义取决于单元的几何形状，一维看作长度比，二维看作面积比，三维看作体积比。在二维有限元中，三角形单元应用的最早，近来四边形等参元的应用也越来越广。对于二维三角形和四边形电源单元，常采用的插值函数为有Lagrange插值直角坐标系中的线性插值函数及二阶或更高阶插值函数、面积坐标系中的线性插值函数、二阶或更高阶插值函数等。 </p>
<br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;对于有限元法，其基本思路和解题步骤可归纳为 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)建立积分方程，根据变分原理或方程余量与权函数正交化原理，建立与微分方程初边值问题等价的积分表达式，这是有限元法的出发点。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 区域单元剖分，根据求解区域的形状及实际问题的物理特点，将区域剖分为若干相互连接、不重叠的单元。区域单元划分是采用有限元方法的前期准备工作，这部分工作量比较大，除了给计算单元和节点进行编号和确定相互之间的关系之外，还要表示节点的位置坐标，同时还需要列出自然边界和本质边界的节点序号和相应的边界值。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 确定单元基函数，根据单元中节点数目及对近似解精度的要求，选择满足一定插值条 件的插值函数作为单元基函数。有限元方法中的基函数是在单元中选取的，由于各单元具有规则的几何形状，在选取基函数时可遵循一定的法则。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4) 单元分析：将各个单元中的求解函数用单元基函数的线性组合表达式进行逼近；再将近似函数代入积分方程，并对单元区域进行积分，可获得含有待定系数(即单元中各节点的参数值)的代数方程组，称为单元有限元方程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5) 总体合成：在得出单元有限元方程之后，将区域中所有单元有限元方程按一定法则进行累加，形成总体有限元方程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6) 边界条件的处理：一般边界条件有三种形式，分为本质边界条件(狄里克雷边界条件)、自然边界条件(黎曼边界条件)、混合边界条件(柯西边界条件)。对于自然边界条件， 一般在积分表达式中可自动得到满足。对于本质边界条件和混合边界条件，需按一定法 则对总体有限元方程进行修正满足。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (7) 解有限元方程：根据边界条件修正的总体有限元方程组，是含所有待定未知量的封闭方程组，采用适当的数值计算方法求解，可求得各节点的函数值。</p>
<br>
<p><font color=#ff0000><strong>有限体积法(Finite Volume Method--FVM)</strong></font></p>
<br>
<p><strong><font color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color=#000000>有限体积法</font></strong>又称为控制体积法。其基本思路是：将计算区域划分为一系列不重复的控制体积，并使每个网格点周围有一个控制体积；将待解的微分方程对每一个控制体积积分，便得出一组离散方程。其中的未知数是网格点上的因变量的数值。为了求出控制体积的积分，必须假定值在网格点之间的变化规律，即假设值的分段的分布的分布剖面。从积分区域的选取方法看来，有限体积法属于加权剩余法中的子区域法；从未知解的近似方法看来，有限体积法属于采用局部近似的离散方法。简言之，子区域法属于有限体积发的基本方法。 </p>
<br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有限体积法的基本思路易于理解，并能得出直接的物理解释。离散方程的物理意义，就是因变量在有限大小的控制体积中的守恒原理，如同微分方程表示因变量在无限小的控 制体积中的守恒原理一样。限体积法得出的离散方程，要求因变量的积分守恒对任意一组控制体积都得到满足，对整个计算区域，自然也得到满足。这是有限体积法吸引人的优点。有一些离散方法，例如有限差分法，仅当网格极其细密时，离散方程才满足积分守恒；而有限体积法即使在粗网格情况下，也显示出准确的积分守恒。就离散方法而言，有限体积法可视作有限单元法和有限差分法的中间物。有限单元法必须假定值在网格点之间的变化规律（既插值函数），并将其作为近似解。有限差分法只考虑网格点上的数值而不考虑值在网格点之间如何变化。有限体积法只寻求的结点值，这与有限差分法相类似；但有限体积法在寻求控制体积的积分时，必须假定值在网格点之间的分布，这又与有限单元法相类似。在有限体积法中，插值函数只用于计算控制体积的积分，得出离散方程之后，便可忘掉插值函数；如果需要的话，可以对微分方程中不同的项采取不同的插值函数。 </p>
<img src ="http://www.cppblog.com/ningfangli-blog/aggbug/121041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ningfangli-blog/" target="_blank">ningfangli</a> 2010-07-22 16:21 <a href="http://www.cppblog.com/ningfangli-blog/articles/121041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Blitz++ 与 MTL 两大数值计算程序库 (C++) 的简介 </title><link>http://www.cppblog.com/ningfangli-blog/articles/15567.html</link><dc:creator>ningfangli</dc:creator><author>ningfangli</author><pubDate>Wed, 22 Nov 2006 15:33:00 GMT</pubDate><guid>http://www.cppblog.com/ningfangli-blog/articles/15567.html</guid><wfw:comment>http://www.cppblog.com/ningfangli-blog/comments/15567.html</wfw:comment><comments>http://www.cppblog.com/ningfangli-blog/articles/15567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ningfangli-blog/comments/commentRss/15567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ningfangli-blog/services/trackbacks/15567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者Blog：																												http://blog.csdn.net/newsuppy/												        Blitz++				与		MTL		都是基于		C++ template		高效数值计算程序库，不过他们专注于不同的方向。																	...&nbsp;&nbsp;<a href='http://www.cppblog.com/ningfangli-blog/articles/15567.html'>阅读全文</a><img src ="http://www.cppblog.com/ningfangli-blog/aggbug/15567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ningfangli-blog/" target="_blank">ningfangli</a> 2006-11-22 23:33 <a href="http://www.cppblog.com/ningfangli-blog/articles/15567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>