隐式与显示的区别
显式动力学与隐式动力学

显式动力学与隐式动力学
显式动力学和隐式动力学是在数值求解微分方程时使用的两种方法。
显式动力学方法是指在求解微分方程时,直接根据已知的初始条件和微分方程的表达式进行迭代计算。
在每个时间步长内,通过使用已知的参数和当前时刻的状态来计算下一个时刻的状态。
这种方法通常比较简单直观,计算也相对比较快速。
隐式动力学方法则是通过将微分方程转化为一个隐式方程组进行求解。
在每个时间步长内,需要通过求解一个非线性方程组来确定下一个时刻的状态。
这种方法的优势在于可以处理一些比较复杂的微分方程,如刚性方程。
然而,由于需要求解方程组,计算复杂度较高,通常比显式方法慢。
选择使用显式动力学还是隐式动力学方法,在很大程度上取决于所求解的微分方程的特性和计算资源的限制。
一般来说,如果微分方程是非刚性的且计算资源充足,则显式动力学方法可能是更好的选择;而如果微分方程是刚性的或者对计算资源较为敏感,则隐式动力学方法可能更适合。
显式与隐式算法区别

显式(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)时刻决定,也就是说当前时刻的值由上一时刻的值决定。
隐式求解与显式求解.

大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。
下面先简要对比一下隐式求解法和显示求解法。
动态问题涉及到时间域的数值积分方法问题。
在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)可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式求解法的优点是它既没有收敛性问题,也不需要求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。
显示积分和隐式积分法

这是ansys里面的两种求解方法。
大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。
下面先简要对比一下隐式求解法和显示求解法。
动态问题涉及到时间域的数值积分方法问题。
在80年代中期以前,人们基本上采用纽曼法进行时间域的积分。
根据纽曼法,位移、速度和加速度有着如下关系:u(i+1)=u(i)+ △ t*v(i)[(1 —2p)a(i)+2p*a(i+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为当前时刻与前一时刻的时问差,符号*为乘号。
由式⑴和式⑵可知,在纽曼法中任一时刻的位移、速度、加速度都相互关联,这就使得运动方程的求解变成一系列相互关联的非线性方程的求解,这个求解过程必须通过迭代和求解联立方程组才能实现。
这就是通常所说的隐式求解法。
隐式求解法可能遇到两个问题。
一是迭代过程不一定收敛,二是联立方程组可能出现病态而无确定的解。
隐式求解法最大的优点是它具有无条件稳定性,即时间步长可以任意大。
如果采用中心差分法来进行动态问题的时域积分,则有如下位移、速度和加速度关系式:u(i+1)=2u(i)-u(i-1)+a(i)( △ t)A2 (3)v(i+1)=[u(i+1)-u(i-1)] /2(△ t) (4)式中u(i-1),为i-1时刻的位移。
由式⑶可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式求解法的优点是它既没有收敛性问题,也不需要求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。
显示意图和隐式意图的用处和区别

Intent.setClassName(packageName,className)不指定动作和数据,直接指定需要操作的组件。
等于该语句:new Intent(this,CalcActiviy.class)
packageName:当前包名,可以使用getPackageName()获得
(好处是应用程序之间没有耦合,激活别人写的应用,隐式意图不需要关心对方的包名和类名)
intent.setDate和intent.setType是相互排斥的
如果同时需要设定type和data应该使用setDataAndType();
总结:
显示意图:必须制时候采用显示意图)
隐式意图:只需要指定需要完成的动作和数据就行
action节点下 一般前面跟包名,后面指定要完成的动作
使用隐式意图开启界面的时候需要指定<action/> <data/> <category/>节点
其中data节点对应setType
Intent.setAction(action)
Intent.setDate(date)
className:需要激活的组件必须要与清单文件中的类名一致
例如:com.itheima.rpcalc.CalcActiviy
开启界面的方法startActivity(intent)
隐式意图:
每次创建一个新的activity界面都要记得在manifest文件中声明一下
在intent-filter节点中
相对于显示意图更加灵活一点,
intent.setAction():指定动作 参数是包名加动作描述字符
intent.setType("application/person")设置类型(直接写就是,并不懂是什么)
显示积分和隐式积分法

这是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)可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式求解法的优点是它既没有收敛性问题,也不需要求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。
显式与隐式(ExplicitAndImplicit)

显式与隐式(ExplicitAndImplicit)显式与隐式(Explicit And Implicit)1.概念1.1 显式实现的单词Explicit意思是清楚的、明确的、详述的。
所以,显式的“显”是指明显且清楚的实现,相对于接⼝来说,就是明显⽽清楚的指定了接⼝的实现。
对于其他的逻辑来说,显式就是清楚且明确的指定了实现内容。
1.2 隐式实现的单词Implicit意思是隐匿的、不⾔明的、绝对的。
所以,隐式的实现是指想当然的实现,相对于接⼝来说,只要实现类的⽅法签名和返回值与接⼝定义的⼀致即视为接⼝的实现,并⽆显式的(清晰的、明确的)指定。
2.例⼦2.1 代码1using System;2namespace ExplicitAndImplicit{3//⼑⼦4public interface IKnife{5void KillPeople();6 }7//枪8public interface IGun{9void KillPeople();10 }11//隐式实现12public class WrongKillMachine:IKnife,IGun{13public void KillPeople(){14 Console.WriteLine("切切切脑袋");15 }16 }17//显式实现:18//1.实现接⼝⽅法不需要加访问定义符19//2.实现接⼝⽅法前⾯要加接⼝名.⽅法名,⽤来指定其实现的接⼝20//2.实现接⼝⽅法只能被显式的调⽤,不能被隐式的调⽤:21// 显式调⽤:22public class KillMachine:IKnife,IGun{23void IKnife.KillPeople(){24 Console.WriteLine("切切切");25 }26void IGun.KillPeople(){27 Console.WriteLine("啪啪啪");28 }29 }30public static class Case31 {32public static void Begin(){33 Console.WriteLine("Design Pattern —— Explicit And Implicit:");34//隐式实现35 WrongKillMachine w = new WrongKillMachine();36 w.KillPeople();3738//显式实现39 IKnife k = new KillMachine();40 k.KillPeople();41 IGun g = new KillMachine();42 g.KillPeople();43 }44 }45 }2.2 结果2.3 例⼦解释2.3.1 隐式实现即为WrongKillMachine类,并没有指定每个接⼝的实现⽅法,⽽是通过⼀个签名与返回值⼀致的⽅法来隐式实现(Implicit、不⾔明的、绝对的、隐匿的)。
自动化:显示等待和隐式等待的区别和使用常见

⾃动化:显⽰等待和隐式等待的区别和使⽤常见Selenium⾃动化测试中会遇到这样的问题:⼀通执⾏下来提⽰空指针或者提⽰元素找不到,此时可以考虑加个等待时间。
Selenium常⽤的等待包括显⽰等待、隐式等待、强制等待。
1.显式等待element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,‘kw’))element.sendkeys("xxx")说明:显⽰等待是单独针对某个元素,设置⼀个等待时间如5秒,每隔0.5秒检查⼀次是否出现,如果在5秒之前任何时候出现,则继续向下,超过5秒尚未出现则抛异常。
显⽰等待与隐式等待相对,显⽰等待必须在每个需要等待的元素前⾯进⾏声明。
使⽤场景:当打开⼀个新页⾯,执⾏第⼀个元素操作的时候;当某⼀步操作会引发页⾯的加载,并且加载的内容包含了下⼀步需要操作的元素。
⼀句话,就是当某个元素有加载过程的时候,就需要加上显⽰等待。
2.隐式等待driver.implicitly_wait(10)说明:隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。
可以理解为在10秒以内,不停刷新看元素是否加载出来。
使⽤场景:隐式等待只需要声明⼀次,⼀般在打开浏览器后进⾏声明。
声明之后对整个drvier的⽣命周期都有效,后⾯不⽤重复声明。
隐式等待存在⼀个问题,那就是程序会⼀直等待整个页⾯加载完成,也就是⼀般情况下你看到浏览器标签栏那个⼩圈不再转,才会执⾏下⼀步,但有时候页⾯想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍得等到页⾯全部完成才能执⾏下⼀步。
3.强制等待:time.sleep(3)⽤以设置固定的线程休眠时间(s),使得整个脚本暂停。
但是这种⽅式会导致这个脚本运⾏时间过长,不到万不得已尽可能少⽤,特殊情况下,时间设置最好不超过1秒,⼀般0.5秒。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
显示动力学与隐式动力学求解的区别。
(2011-10-15 15:34:02)
分类:札记
标签:
杂谈
显式求解是对时间进行差分,不存在迭代和收敛问题,最小时间步取决于最小单元的尺寸。
过多和过小的时间步往往导致求解时间非常漫长,但总能给出一个计算结果。
解题费用非常昂贵。
因此在建模划分网格时要非常注意。
隐式求解和时间无关,采用的是牛顿迭代法(线性问题就直接求解线性代数方程组),因此存在一个迭代收敛问题,不收敛就的不到结果。
两者求解问题所耗时间的长短理论上无法比较。
实际应用中一般感觉来说显式耗时多些。
由于两者解题的出发点,所以一般来说显式用于求解和时间相关的动力学问题。
隐式用来求解和时间无关的静力学问题。
但也不是绝对的。
比如,用隐式求解时,为了克服迭代不收敛,改用显式算,但是要多给点时间,这样虽然克服了不收敛的问题,但是求解的时间费用也是相当客观的。
另外,隐式也可以求解动力学问题。
1、显式算法基于动力学方程,因此无需迭代;而静态隐式算法基于虚功原理,一般需要迭代计算
2、显式算法最大优点是有较好的稳定性。
动态显式算法采用动力学方程的一些差分格式(如广泛使用的中心差分法、线性加速度法、Newmark法和wilson法等),不用直接求解切线刚度,不需要进行平衡迭代,计算速度快,时间步长只要取的足够小,一般不存在收敛性问题。
因此需要的内存也比隐式算法要少。
并且数值计算过程可以很容易地进行并行计算,程序编制也相对简单。
但显式算法要求质量矩阵为对角矩阵,而且只有在单元级计算尽可能少时速度优势才能发挥, 因而往往采用减缩积分方法,容易激发沙漏模式,影响应力和应变的计算精度。
静态显式法基于率形式的平衡方程组与Euler向前差分法,不需要迭代求解。
由于平衡方程式仅在率形式上得到满足,所以得出的结果会慢慢偏离正确值。
为了减少相关误差,必须每步使用很小的增量。
3、隐式算法
隐式算法中,在每一增量步内都需要对静态平衡方程进行迭代求解,并且每次迭代都
需要求解大型的线性方程组,这个过程需要占用相当数量的计算资源、磁盘空间和内存。
该算法中的增量步可以比较大,至少可以比显式算法大得多,但是实际运算中上要受到迭代次数及非线性程度的限制,需要取一个合理值。
4、求解时间
使用显式方法,计算成本消耗与单元数量成正比,并且大致与最小单元的尺寸成反比;
应用隐式方法,经验表明对于许多问题的计算成本大致与自由度数目的平方成正比;因此如果网格是相对均匀的,随着模型尺寸的增长,显式方法表明比隐式方法更加节省计算成本
隐式求解法
将冲压成型过程的计算作为动态问题来处理后,就涉及到时间域的数值积分方法问题。
在80年代中期以前,人们基本上使用牛曼法进行时间域的积分。
根据牛曼法,位移、速度和加速度有着如下的关系:上面式子中,分别为当前时刻和前一时刻的位移,和为当前时刻和前一时刻的速度,和为当前时刻和前一时刻的加速度,β和γ为两个待定参数。
由上式可知,在牛曼法中任一时刻的位移、速度和加速度都相互关联,这就使得运动方程的求解变成一系列相互关联的非线性方程的求解。
这个求解过程必须通过迭代和求解联立方程组才能实现。
这就是通常所说的隐式求解法。
隐式求解法可能遇到两个问题。
一是迭代过程不一定收敛;二是联立方程组可能出现病态而无确定的解。
隐式求解法的最大优点是它具有无条件稳定性,即时间步长可以任意大。
显式求解法
如果采用中心差分法来进行动态问题的时域积分,则有如下位移、速度和加速度关系:由上式可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。
另外,只要将运动方程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。
显式求解法的优点是它即没有收敛性问题,也不需求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。
由于冲压成型过程具有很强的非线性,从解的精度考虑,时间步长也不能太大,这就在很大程度上弥补了显式求解法的缺陷。
在80年代中期以前显式算法主要用于高速碰撞的仿真计算,效果很好。
自80年代后期被越来越广泛地用于冲压成型过程的仿真,目前在这方面的应用效果已超过隐式算法。
显式算法在冲压成型过程的仿真中获得成功应用的关键,在于它不像隐式算法那样有解的收敛性问题。
附加说明:
1)求解线性静力学问题,虽然求解线性方程组,但是没有时步的关系,所以不应将其看作隐式算法。
2)求解非线性静力学问题,虽然求解过程需要迭代,或者是增量法,但是没有明显的时步问题,所以不应将其看作隐式算法。
3)静态松弛法,可以认为是将动力学问题看作静力学问题来解决,每一步达到静力平衡,需要数值阻尼。
4)动态松弛法,可以认为是将静力学问题或者动力学问题,分为时步动力学问题,采用向后时步迭代的思想计算。
对于解决静力学问题时,需要人工阻尼。
根据我的理解,是这样的:
(1)显式算法包括动态显式和静态显式算法。
动态显式算法的最大优点是有较好的稳定性。
动态显式算法采用动力学方程的中心差分格式,不用直接求解切线刚度,不需要进行平衡迭代,计算速度快,也不存在收敛控制问题。
该算法需要的内存也比隐式算法要少。
数值计算过程可以很容易地进行并行计算,程序编制也相对简单。
它也有一些不利方面。
显式算法要求质量矩阵为对角矩阵,而且只有在单元级计算尽可能少时速度优势才能发挥, 因而往往采用减缩积分方法,容易激发沙漏模式,影响应力和应变的计算精度。
动态隐式法还有一个重要特点是:对成形过程的仿真需要使用者正确划分有限元网格和选择质量比例参数、速度和阻尼系数。
静态显式法基于率形式的平衡方程组与Euler前插公式,不需要迭代求解。
由于平衡方程式仅在率形式上得到满足,所以得出的结果会慢慢偏离正确值。
为了减少相关误差,必须每步使用很小的增量,通常一个仿真过程需要多达几千步。
由于不需要迭代,所以这种方法稳定性好,但效率低。
(2)隐式算法
静态算法也是解决金属成形问题的一种方法。
在静态隐式算法中,在每一增量步内都需要对静态平衡方程而迭代求解。
理论上在这个算法中的增量步可以很大,但是实际运算中上要受到接触以及摩擦等条件的限制。
随着单元数目的增加,计算时间几乎呈平方次增加。
由于需要矩阵求逆以及精确积分,对内存要求很高。
隐式算法的不利方面还有收敛问题不容易得到解决以及当开始起皱失稳时,在分叉点处刚度矩阵出现奇异。
另有一种静态隐式大增量步软件,也属于静态隐式算法,做出了某些改进,如在一些特殊接触条件处理上采用大增量时步,弯曲与拉伸变形的非耦合求解算法,高精度的自适应网格划分等等。
这些专用于金属薄板成形的特征有时显得非常有效,但在某些方面不会那么准确。
例如,它不能精确模拟接触和脱离接触的过程,无法有效预测起皱失稳。