显式算法与隐式算法的区别
- 格式:doc
- 大小:22.00 KB
- 文档页数:6
了解隐式显式ODE求解算法的优劣隐式和显式ODE求解算法是数值计算中的两个重要方法。
它们分别适用于不同的数学问题,并各具优缺点。
本文旨在探讨隐式和显式ODE求解算法的优劣以及其适用范围,帮助读者更好地了解这两种算法。
一、什么是ODE求解算法ODE是常微分方程(Ordinary Differential Equation)的简称,它是一种描述自然现象中变量随时间变化的数学模型。
ODE求解算法是对ODE进行数值求解的方法,将方程表示为计算机可以处理的形式,并将其求解为数值结果。
常见的ODE求解算法有欧拉法、龙格-库塔法、变步长法等。
其中,欧拉法是最基本的算法,也是最容易理解的算法;龙格-库塔法具有较高的精度和稳定性,是许多科学和工程中经常使用的算法。
二、隐式和显式ODE求解算法隐式ODE求解算法和显式ODE求解算法是求解ODE的两种不同方法。
显式ODE求解算法是根据时间步长和已知的初值,递推求解下一个时刻的函数值,并将其作为下一步的初值。
显式算法用的是当前时刻的函数值进行求解,因此计算速度较快,但精度可能较低。
隐式ODE求解算法是通过求解方程来确定下一个时刻的函数值。
即在每个时间步长中需要求解一个方程组,求解过程相对复杂,但具有更高的精度和稳定性。
隐式算法需要求解的方程通常为非线性方程组,因此求解难度也比较高。
三、隐式和显式ODE求解算法的优劣比较1. 精度和稳定性由于隐式ODE求解算法的求解过程相对复杂,需要求解方程组,因此精度和稳定性相对较高。
而显式ODE求解算法用的是当前时刻的函数值进行求解,容易出现精度误差和数值不稳定等问题,因此在精度和稳定性方面相对较低。
2. 计算速度显式ODE求解算法使用较简单的计算方法,不需要求解复杂的方程组,因此计算速度比隐式算法要快。
3. 适用范围隐式ODE求解算法适用于具有强烈非线性特征和不稳定性的ODE问题,例如高效液相色谱(HPLC)中液体流动的模拟和化学反应方程求解等。
大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。
下面先简要对比一下隐式求解法和显示求解法。
动态问题涉及到时间域的数值积分方法问题。
在80年代中期以前,人们基本上采用纽曼法进行时间域的积分。
根据纽曼法,位移、速度和加速度有着如下关系:u(i+1)=u(i)+△t*v(i)[(1—2p)a(i)+2p*a(i+1)] (1)v(i+1)=V(i)+△t[(1-2q)a(i)+2qa(i+1)] (2)上面式子中 u(i+1),u(i)分别为当前时刻和前一时刻的位移,v(i+1)和V(i)为当前时刻和前一时刻的速度,a(i+1)和a(i)为当前时刻和前一时刻的加速度,p和q为两个待定参数,△t为当前时刻与前一时刻的时问差,符号 * 为乘号。
由式(1)和式(2)可知,在纽曼法中任一时刻的位移、速度、加速度都相互关联,这就使得运动方程的求解变成一系列相互关联的非线性方程的求解,这个求解过程必须通过迭代和求解联立方程组才能实现。
这就是通常所说的隐式求解法。
隐式求解法可能遇到两个问题。
一是迭代过程不一定收敛,二是联立方程组可能出现病态而无确定的解。
隐式求解法最大的优点是它具有无条件稳定性,即时间步长可以任意大。
如果采用中心差分法来进行动态问题的时域积分,则有如下位移、速度和加速度关系式:u(i+1)=2u(i)-u(i-1)+a(i)(△t)^2 (3)v (i+1)=[u (i+1)-u (i-1)]/2(△t) (4)式中u(i-1),为i -1时刻的位移。
由式(3)可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式求解法的优点是它既没有收敛性问题,也不需要求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。
显式表达式
显式表达式,可以理解为呈现出来的表达式,或者是显示出来的表达式,相对于隐性表达式。
显式算法基于动力学方程,因此无需迭代;而静态隐式算法基于虚功原理,一般需要迭代计算。
显式算法最大优点是有较好的稳定性。
动态显式算法采用动力学方程的一些差分格式(如广泛使用的中心差分法、线性加速度法、Newmark法和wilson法等),不用直接求解切线刚度,不需要进行平衡迭代,计算速度快,时间步长只要取的足够小,一般不存在收敛性问题。
因此需要的内存也比隐式算法要少。
并且数值计算过程可以很容易地进行并行计算,程序编制也相对简单。
显式与隐式的区别
使用显式方法,计算成本消耗与单元数量成正比,并且大致与最小单元的尺寸成反比,应用隐式方法,经验表明对于许多问题的计算成本大致与自由度数目的平方成正比,因此如果网格是相对均匀的,随着模型尺寸的增长,显式方法表明比隐式方法更加节省计算成本。
显式算法是建立在i时刻的运动平衡方程,不需要迭代,运算简单但是对步长要求很高,因为其影响精度和稳定性;而隐式算法是建立在i+1时刻的,因此需要迭代,过程复杂些,但是更加精确。
ABAQUS显式与隐式的区别ABAQUS中动态分析包括两大类基本方法:振型叠加法:用于求解线性动态问题;直接积分法:主要用于求解非线性动态问题。
ABAQUS显式(explicit)和隐式(standard)算法分别对应着直接积分法中的中心差分法(显式)和Newmark(隐式)法等。
比较两种算法,显式中心差分法非常适合研究波的传播问题,如碰撞、高速冲击、爆炸等。
显式中心差分法的M与C矩阵是对角阵,如给定某些有限元节点以初始扰动,在经过一个时间步长后,和它相关的节点进入运动,即U中这些节点对应的分量成为非零量,此特点正好和波的传播特点相一致。
另一方面,研究波传播的过程需要微小的时间步长,这也正是中心差分法的特点。
而Newmark法更加适合于计算低频占主导的动力问题,从计算精度考虑,允许采用较大的时间步长以节省计算时间,同时较大的时间步长还可以过滤掉高阶不精确特征值对系统响应的影响。
隐式方法要转置刚度矩阵,增量迭代,通过一系列线性逼近(Newton-Raphson)来求解。
正因为隐式算法要对刚度矩阵求逆,所以计算时要求整体刚度矩阵不能奇异,对于一些接触高度非线性问题,有时无法保证收敛。
下面分别介绍这两种算法。
1 显式算法(中心差分法)假定0,1t ,2t ,…,n t 时刻的节点位移,速度与加速度均为已知,现求解)(t t t n ∆+时刻的结构响应。
中心差分法对加速度,速度的导数采用中心差分代替,即为:)(21)2(12t t t t t t t t t t t U U tU U U U t U ∆-∆+∆+∆--∆=+-∆= (1) 将(1)式代入运动方程后整理得到tt t R U M ˆˆ=∆+(2) 式(2)中C tM t M ∆+∆=211ˆ2(3) t t t t t U C tM t U M t K R R ∆-∆-∆-∆--=)211()2(ˆ22(4) 分别称为有效质量矩阵,有效载荷矢量。
先说说显示算法和隐式算法:这是ansys里面的两种求解方法。
大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。
下面先简要对比一下隐式求解法和显示求解法。
动态问题涉及到时间域的数值积分方法问题。
在80年代中期以前,人们基本上采用纽曼法进行时间域的积分。
根据纽曼法,位移、速度和加速度有着如下关系:u(i+1)=u(i)+△t*v(i)[(1—2p)a(i)+2p*a(i+1)] (1)v(i+1)=V(i)+△t[(1-2q)a(i)+2qa(i+1)] (2)上面式子中 u(i+1),u(i)分别为当前时刻和前一时刻的位移,v(i+1)和V(i)为当前时刻和前一时刻的速度,a(i+1)和a(i)为当前时刻和前一时刻的加速度,p和q为两个待定参数,△t为当前时刻与前一时刻的时问差,符号* 为乘号。
由式(1)和式(2)可知,在纽曼法中任一时刻的位移、速度、加速度都相互关联,这就使得运动方程的求解变成一系列相互关联的非线性方程的求解,这个求解过程必须通过迭代和求解联立方程组才能实现。
这就是通常所说的隐式求解法。
隐式求解法可能遇到两个问题。
一是迭代过程不一定收敛,二是联立方程组可能出现病态而无确定的解。
隐式求解法最大的优点是它具有无条件稳定性,即时间步长可以任意大。
如果采用中心差分法来进行动态问题的时域积分,则有如下位移、速度和加速度关系式:u(i+1)=2u(i)-u(i-1)+a(i)(△t)^2 (3)v(i+1)=[u(i+1)-u(i-1)]/2(△t) (4)式中u(i-1),为i-1时刻的位移。
由式(3)可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式算法与隐式算法的区别-CAL-FENGHAI.-(YICAI)-Company One1显式算法与隐式算法的区别所谓显式和隐式,是指求解方法的不同,即数学上的出发点不一样。
并不是说显式只能求动力学问题,隐式只能求静力学问题,只是求解策略不通。
显式求解是对时间进行差分,不存在迭代和收敛问题,最小时间步取决于最小单元的尺寸。
过多和过小的时间步往往导致求解时间非常漫长,但总能给出一个计算结果。
解题费用非常昂贵。
因此在建模划分网格时要非常注意。
隐式求解和时间无关,采用的是牛顿迭代法(线性问题就直接求解线性代数方程组),因此存在一个迭代收敛问题,不收敛就的不到结果。
两者求解问题所耗时间的长短理论上无法比较。
实际应用中一般感觉来说显式耗时多些。
由于两者解题的出发点,所以一般来说显式用于求解和时间相关的动力学问题。
隐式用来求解和时间无关的静力学问题。
但也不是绝对的。
比如,用隐式求解时,为了克服迭代不收敛,改用显式算,但是要多给点时间,这样虽然克服了不收敛的问题,但是求解的时间费用也是相当客观的。
另外,隐式也可以求解动力学问题。
这是ansys里面的两种求解方法。
大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。
下面先简要对比一下隐式求解法和显示求解法。
动态问题涉及到时间域的数值积分方法问题。
在80年代中期以前,人们基本上采用纽曼法进行时间域的积分。
根据纽曼法,位移、速度和加速度有着如下关系:u(i+1)=u(i)+△t*v(i)[(1—2p)a(i)+2p*a(i+1)] (1)v(i+1)=V(i)+△t[(1-2q)a(i)+2qa(i+1)] (2)上面式子中 u(i+1),u(i)分别为当前时刻和前一时刻的位移,v(i+1)和V(i)为当前时刻和前一时刻的速度,a(i+1)和a(i)为当前时刻和前一时刻的加速度,p和q为两个待定参数,△t为当前时刻与前一时刻的时问差,符号 * 为乘号。
显式(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)时刻决定,也就是说当前时刻的值由上一时刻的值决定。
显式与隐式方法对比显式与隐式方法对比:隐式时间积分——不考虑惯性效应([C]and[M])。
——在t+△t时计算位移和平均加速度:{u}={F}/[K]。
——线性问题时,无条件稳定,可以用大的时间步。
——非线性问题时,通过一系列线性逼近(Newton-Raphson)来求解;要求转置非线性刚度矩阵[k];收敛时候需要小的时间步;对于高度非线性问题无法保证收敛。
显式时间积分——用中心差法在时间t求加速度:{a}=([F(ext)]-[F(int)])/[M]。
——速度与位移由:{v}={v0}+{a}t,{u}={u0}+{v}t——新的几何构型由初始构型加上{X}={X0}+{U}——非线性问题时,块质量矩阵需要简单的转置;方程非耦合,可以直接求解;无须转置刚度矩阵,所有的非线性问题(包括接触)都包含在内力矢量中;内力计算是主要的计算部分;无效收敛检查;保存稳定状态需要小的时间步。
关于文件组织:jobname.k——lsdyna输入流文件,包括所有的几何,载荷和材料数据jobname.rst——后处理文件主要用于图形后处理(post1),它包含在相对少的时间步处的结果。
jobname.his——在post26中使用显示时间历程结果,它包含模型中部分与单元集合的结果数据。
时间历程ASCII文件——包含显式分析额外信息,在求解之前需要用户指定要输出的文件,它包括:GLSTAT全局信息,MATSUM材料能量,SPCFORC节点约束反作用力,RCFORC接触面反作用力,RBDOUT刚体数据,NODOUT节点数据,ELOUT单元数据……在显式动力分析中还可以生成下列文件:D3PLOT——类似ansys中jobname.rstD3THDT——时间历程文件,类似ansys中jobname.his关于单元:ANSYS/LSDYNA有7中单元(所有单元均为三维单元):LINK160:显式杆单元;BEAM161:显式梁单元;SHELL163:显式薄壳单元;SOLID164:显式块单元;COMBI165:显式弹簧与阻尼单元;MASS166:显式结构质量;LINK167:显式缆单元显式单元与ansys隐式单元不同:——每种单元可以用于几乎所有的材料模型。
显式算法与隐式算法得区别
1、显式算法
最大优点就是有较好得稳定性。
动态显式算法采用动力学方程得一些差分格式(如广泛使用得中心差分法、线性加速度法、Newmark法与wilson法等),不用直接求解切线刚度,不需要进行平衡迭代,计算速度快,时间步长只要取得足够小,一般不存在收敛性问题。
因此需要得内存也比隐式算法要少。
并且数值计算过程可以很容易地进行并行计算,程序编制也相对简单。
但显式算法要求质量矩阵为对角矩阵,而且只有在单元级计算尽可能少时速度优势才能发挥。
因而往往采用减缩积分方法,容易激发沙漏模式,影响应力与应变得计算精度。
静态显式法基于率形式得平衡方程组与Euler向前差分法,不需要迭代求解。
由于平衡方程式仅在率形式上得到满足,所以得出得结果会慢慢偏离正确值。
为了减少相关误差,必须每步使用很小得增量。
2、隐式算法
隐式算法中,在每一增量步内都需要对静态平衡方程进行迭代求解,并且每次迭代都需要求解大型得线性方程组,这以过程需要占用相当数量得计算资源、磁盘空间与内存。
该算法中得增量步可以比较大,至少可以比显式算法大得多,但就是实际运算中上要受到迭代次数及非线性程度得限制,需要取一个合理值。
3、求解时间t
使用显式方法,计算成本消耗与单元数量成正比,并且大致与最小
单元得尺寸成反比;
应用隐式方法,经验表明对于许多问题得计算成本大致与自由度数目得平方成正比;
因此如果网格就是相对均匀得,随着模型尺寸得增长,显式方法表明比隐式方法更加节省计算成本。
所谓显式与隐式,就是指求解方法得不同,即数学上得出发点不一样。
并不就是说显式只能求动力学问题,隐式只能求静力学问题,只就是求解策略不通。
显式求解就是对时间进行差分,不存在迭代与收敛问题,最小时间步取决于最小单元得尺寸。
过多与过小得时间步往往导致求解时间非常漫长,但总能给出一个计算结果。
解题费用非常昂贵。
因此在建模划分网格时要非常注意。
隐式求解与时间无关,采用得就是牛顿迭代法(线性问题就直接求解线性代数方程组),因此存在一个迭代收敛问题,不收敛就得不到结果。
两者求解问题所耗时间得长短理论上无法比较。
实际应用中一般感觉来说显式耗时多些。
由于两者解题得出发点,所以一般来说显式用于求解与时间相关得动力学问题。
隐式用来求解与时间无关得静力学问题。
但也不就是绝对得。
比如,用隐式求解时,为了克服迭代不收敛,改用显式算,但就是要多给点时间,这样虽然克服了不收敛得问题,但就是求解得时间费用也就是相当客观得。
另外,隐式也可以求解动力
学问题。
牛顿迭代法
设r就是
得根,选取
作为r得初始近似值,过点
做曲线
得切线L,L得方程为
,求出L与x轴交点得横坐标
,称x1为r得一次近似值。
过点
做曲线
得切线,并求该切线与x轴交点得横坐标,称
为r得二次近似值。
重复以上过程,得r得近似值序列,其中,称为r得
次近似值,上式称为牛顿迭代公式。
用牛顿迭代法解非线性方程,就是把非线性方程
线性化得一种近似方法。
把
在点
得某邻域内展开成泰勒级数
,取其线性部分(即泰勒展开得前两项),并令其等于0,即,以此作为非线性方程
得近似方程,若
,则其解为
, 这样,得到牛顿迭代法得一个迭代关系式:。
已经证明,如果就是连续得,并且待求得零点就是孤立得,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。
并且,如果不为0, 那么牛顿法将具有平方收敛得性能、粗略得说,这意味着每迭代一次,牛顿法结果得有效数字将增加一倍。
[1]
军人在进攻时常采用交替掩护进攻得方式,若在数轴上得点表示A,B两人得位置,规定在前面得数大于后面得数,则就是
A>B,B>A交替出现。
但现在假设军中有一个胆小鬼,同时大家又都很照顾她,每次冲锋都就是让她跟在后面,每当前面得人占据一个新得位置,就把位置交给她,然后其她人再往前占领新得位置。
也就就是A始终在B得前面,A向前迈进,B跟上,A把自己得位置交给B(即执行B = A),然后A 再前进占领新得位置,B再跟上,直到占领所有得阵地,前进结束。
像这种两个数一前一后逐步向某个位置逼近得方法称为迭代法。
迭代法也称辗转法,就是一种不断用变量得旧值递推新值得过程,跟迭代法相对应得就是直接法(或者称为一次解法),即一次性解决问题。
迭代算法就是用计算机解决问题得一种基本方法。
它利用计算机运算速度快、适合做重复性操作得特点,让计算机
对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量得原值推出它得一个新值。
利用迭代算法解决问题,需要做好以下三个方面得工作:
一、确定迭代变量
在可以用迭代算法解决得问题中,至少存在一个可直接或间接地不断由旧值递推出新值得变量,这个变量就就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量得前一个值推出其下一个值得公式(或关系)。
迭代关系式得建立就是解决迭代问题得关键,通常可以使用递推或倒推得方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这就是编写迭代程序必须考虑得问题。
不能让迭代过程无休止地执行下去。
迭代过程得控制通常可分为两种情况:一种就是所需得迭代次数就是个确定得值,可以计算出来;另一种就是所需得迭代次数无法确定。
对于前一种情况,可以构建一个固定次数得循环来实现对迭代过程得控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程得条件。