显式与隐式算法区别

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

显式(explicit)和隐式(implicit)这两个词在有限元分析中大家可能经常看到,特别是涉及到动力学分析时。但其实广义的说他们分别对应着两种不同的算法:显式算法(explicit method)和隐式算法(implicit method)。所以不论在动力学或者静力学中都有涉及到。

显式算法:不直接求解切线刚度,不进行平衡迭代,计算速度快,时间步长只需要足够小,一般不存在收敛问题,需要的内存也小。

隐式算法:每一增量步都需要对静态方程进行平衡迭代,且每次迭代需要求解大量的线性方程组,这一特点使之占用大量的资源。但该算法增量步可以很大,至少比显式算法大的多,实际计算中会受到迭代次数及非线性程度的影响

我们都知道有限元分析FEA在计算微分方程(differential equations)时,由于计算本身的局限,比如计算机储存的位数有限,以及方程本身的复杂性,计算机运用的是数值算法(numerical algorithm)来逼近真实解的。有限元分析中数值算法的基础是欧拉法(Euler method),欧拉法又分为forward Euler method 和backward Euler method,这两种方法被简称为显式法(explicit method)和隐式法(implicit method)。

中心差分法:

(动力学分析)用有限差分代替位移对时间的求导,将运动方程中的速度与加速度用位移的某种组合来标示,这样就将常微分方程组的求解问题转化为代数方程组的求解问题,并假设在每个小的时间间隔内满足运动方程。

首先我们来看看这两种算法的区别。

显式算法(explicit method )(forward Euler method )

考虑常微分方程:

初始条件:

设为每一步的时间步长, 在Tn 时刻,

. (n=0,1,2,3...),在T(n+1)

时刻有:

所以在显式算法中,T(n+1)时刻的值由T(n)时刻决定,也就是说当前时刻的值由上一时刻

的值决定。

隐式算法(implicit method)(backward Euler method)

考虑同一个方程,在T(n+1)时刻有:

所以在隐示算法中,T(n+1)时刻的值不光由T(n)时刻决定,还由当前时刻T(n+1)决定。也就是说当前时刻的值由上一时刻和当前时刻的值共同决定。隐式算法往往需要求解二次方程。

我们来看看一个具体事例:

设常微分方程:

根据上面的方法,对于显示算法有:

得出:

对于隐式算法有:

导出二次方程:

求解得:

所以很明显,在隐式算法中,要求得K+1时刻的值,就需要求解二次方程的根。

关于收敛性

o显式算法不存在收敛性的问题(因为不进行收敛计算),从方程中可以看出来,每个时刻的值由上一时刻所确定,所以一步一步进行下去,当时间步取得较大时,就会偏离真实值。

显式算法的过程(蓝色为真实值)

o隐式算法是无条件收敛的,在隐式算法中,在求解二次方程的同时,会通过Newton–Raphson method算法对每一步进行迭代收敛,直至收敛到指定的偏差。如下图所示:

o

隐式算法的过程(每个时间步长中,通过Newton–Raphson method算法不断进行收敛迭代,

直至接近真实值为止)

时间步长(time integration)的依赖性(时间变量只在动力学中涉及)

o显式算法要获得准确的结果,需要取很小的时间步长

o隐式算法对时间步长要求不高,由于是绝对收敛的,往往可以取较大的时间步长。

运用上面的方法,我们以方程为例,通过数值算法求得f(u)。当把时间步长取为1时,显式(explicit)和隐式(implicit)的结果如下图所示:

可以看出,隐式算法是绝对收敛的,每一步都没有偏离真实值,而由于时间步长取得很长,所以显式算法的结果远远偏离了真实值。

当把时间步缩小到0.05时,显示算法的结果如下图所示:

可以看出,当把时间步取得很小时,显示算法可以很接近真实值。

上面主要讲了隐式和显式算法的差别,下面我们来看看这两种方法在动力学分析中的运用和差别。

动力学分析(Dynamics Analysis)

静力学(static)分析不考虑质量/阻尼和时间,而动力学分析需要考虑系统阻尼和时间的变化。

首先大家要知道有限元分析FEA的输出是什么,虽然我们可以从仿真后处理中得到很多的结果,如应力,应变,位移等等,但本质上,所有的物理量都是通过先计算出节点处的位移,然后导出应变,再通过应变根据材料力学的理论导出其它物理量的,这一点大家要记住。

在有限元分析中,动力学分析的基本方程是由如下方程导出和决定的:

[M]{a} + [C]{v} + [K]{x} = {F}

其中[M]是质量矩阵,[C]为阻尼矩阵,[K]为刚度矩阵,a为加速度,v为速度,x为位移,{F}表示外力。如果我们把方程写为导数的形式,则有:

所以这里的加速度,速度和位移是彼此关联的,这很有用。

这个方程大家可能不陌生,在前面讲到模态分析时提到过这个方程,当时说的模态分析是不需要考虑质量和阻尼的,所以方程也较简单,只考虑刚度。刚度的导出大家可能不怎么熟悉,刚度在有限元分析中占有很重要的地位。

隐式动力学(explicit dynamic)

在动力学分析中,隐式分析直接计算位移x,而要求得位移x,就需要对刚度矩阵K进行求逆(inversion),而计算机在进行矩阵求逆时,需要耗费大量时间和计算机内存。可能有人会问为什么需要对刚度矩阵K求逆呢,学过线形代数的都知道,要求位移x,那么我们需要对方程做如下变动:

而,所以有:

所以对刚度矩阵K求逆是必须的。

显式动力学(explicit dynamic)

在动力学分析中,显式分析先计算加速度a,再通过积分算法分别导出速度v和位移x。比如一旦在时刻n求得了加速度,速度会在n+1/2时刻计算出,然后位移在n+1时刻求出(相当于一个时间步长),然后通过位移导出应变(strain),在通过应变导出应力(stress)。

可能有人会问,和隐式动力学类似,要求得加速度a,不是一样要对质量矩阵M求逆吗,是的,但这里M的导出远远比刚度矩阵简单很多,而且M可以简化为对角矩阵,所以对M不需要直接求逆,通过简单的矩阵乘法就可以得出逆矩阵。

计算的效率

在动力学分析中,显式法和隐式法在计算时间上各有优缺点

o显示动力学由于是间接求得位移x的,和前面类似,要取得足够的精度,需要取很短的时间步长,所以需要进行很多步计算,但每一步计算需要的时间很短

o隐式动力学由于是直接求得位移x,所以不存在收敛性问题,但由于动力学分析往往涉及到非线性(几何非线性,材料非线性等),可能每一步都要进行刚度的求逆,非常耗时,但时间步长相对显示算法可以取得很大。

适用范围

相关文档
最新文档