找回密码
 注册
Simdroid-非首页
查看: 371|回复: 21

[心得交流] 【个人理解】关于直接法和迭代法的小问题

[复制链接]
发表于 2014-1-8 10:14:36 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 吴聊SP 于 2014-1-8 10:16 编辑

之前有人问过一个小问题,当时没时间仔细研究,于是凭感觉回答了,现在想起来当时说的不太正确,于是又回头看了一下,问题是这样的:


在静态隐式分析步中,方程求解的默认值为“Direct”,不是应该是“Iterative”吗?


查看资料发现:


1)       直接法:全称为直接式线性方程求解法,该方法可以用于线性和非线性的分析,在ABAQUS/Standard模块下,完成非线性分析时常使用牛顿方法或者其他的方法,比如弧长法,在求解的每次迭代过程中都必须要求解一系列线性方程组,而直接线性求解器就是用来寻找这些线性方程组的精确解的。ABAQUS/Standard模块下的直接线性方程求解器使用稀疏、直接、高斯消元法,并且往往表现在分析所消耗时间的大部分时间里(尤其是大型模型的计算)——计算中方程的存储占据着磁盘空间的最大部分。
2)       迭代法:全称为迭代式线性方程求解法,该方法在ABAQUS/Standard模块下,可以用于寻找线性、非线性、准静态、地应力、孔隙流动扩散以及热传导等分析步的线性方程组。由于采用迭代的技术,不能保证给定线性方程组有收敛解,当迭代求解器不收敛时,模型的改进有助于提高收敛性。在某些情况下,使用直接式线性求解可能是得到解答的唯一选择,但当求解收敛时,使用迭代式线性求解法将获得更精确的解答,当然这也要依赖于相对容许值的大小。通常情况下相对容许值的缺省值已经足够精确,然而对于特殊的分析适当地调整容许值将会改善仿真的整体性能,如对于薄板或薄壳结构,相比直接式线性方程求解法,迭代式线性方程求解法将会更适合进行该结构的分析与计算。

从手册中可以看出,上文提到的两种方法均在形成线性方程组之后才区分了两种方法,我的理解是:隐式中我们常说的迭代指的是求解刚度矩阵K时采用的求解方法,当刚度矩阵已经求得并形成了线性方程组KU=P时,直接法就是直接对刚度矩阵求逆,进而得到位移解,而迭代法就是利用迭代的求解手段得到位移解,ABAQUS默认为直接法,即是在忽略计算时间的前提下,保证方程组一定有解的策略而设定,而迭代法是用于大型模型或者薄板及薄壳结构求解时采用的,但前提是可以收敛。

3)       两种方法优缺点对比:
直接法:简单粗暴,保证有解,但求解时间较长,不适合大型模型的计算,占用磁盘空间较大。
迭代法:求解效率高,解答精确,但前提必须保证收敛。

其实这两种方法就是对应了数值分析中对线性方程组的两种求解方式“直接法”和“迭代法”,详情可以查阅 关治 陆金甫的《数值分析基础》高等教育出版社,2010。

希望那次问问题的朋友能看到,也希望广大坛友指正。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

2

查看全部评分

发表于 2014-1-8 10:55:22 | 显示全部楼层 来自 上海
Simdroid开发平台
我正在算一个很简单的静立分析,但是模型很大,已经算了2天了才算到0.5步,可以用iterative试试哈,应该会算的快些吧
回复 不支持

使用道具 举报

发表于 2014-1-8 11:02:44 | 显示全部楼层 来自 北京
原来都一直用的是软件的缺省设置直接法,有机会可以尝试下迭代法,谢谢版主的分享
回复 不支持

使用道具 举报

发表于 2014-1-8 11:21:04 | 显示全部楼层 来自 北京
本帖最后由 xywang52 于 2014-1-8 11:26 编辑

刚好在复习数值分析,帮版主细化下,不严谨或是错误之处求亲拍
我手上这本书讲解线性方程组解法就是分直接法和迭代法。
直接法:像我们求解个二元一次方程组就是直接解法,理论上计算过程没有舍入误差时,得到精确解。一般有,高斯消去法(顺序消去和列主元消去),直接分解法(杜立特尔分解和克劳特分解),三角分解法求解带状线性方程组。它们都是直接法,不同之处在于需要的回代次数和计算机存储内存不一样,具体的差别感兴趣的还是找本书看看。想必abaqus内部是根据不同模型采用不同的算法,或是多种算法的综合的吧。
迭代法:求解方程组的迭代类似方程的迭代求法,就是维数多了,即使计算过程是精确进行的,也不能经过有限次计算得到精确解。
像版主说的采用迭代法需要进行收敛性判据凡是迭代法都有收敛性和精度控制的问题。一般有雅克比迭代、高斯-赛德尔迭代和组词超松弛迭代法等。当迭代结果满足了迭代精度或达到了你设置的迭代次数时,迭代就停止了。

需要指出的是,有个病态线性方程组的概念,像求解这个方程组[1,1.0001;1,1][x1;x2]=[2;2]就是病态的(矩阵凑合看的了(⊙o⊙)…)。对严重病态的方程组Ax=b,当A和b有微小变化时,即使求解过程是精确进行的,求得的解相对于方程的解也是有很大的相对误差。比较遗憾的是,我们操作有限元软件很难知道当前计算方程组的病态程度,像我们把网格画的细一点,规整一点,一个原因就是尽量减轻方程组的病态。

对非线性方程组的求解,绝大多数只能采用迭代法,说道迭代又是收敛性和精度控制的问题的啦,原理都是相通的,一般有简单迭代和牛顿迭代。


评分

3

查看全部评分

回复 不支持

使用道具 举报

发表于 2014-1-8 11:41:40 | 显示全部楼层 来自 河北廊坊
选择直接法还是迭代法来求解方程,和选择牛顿或者其他方法来进行分析之间,是相互独立的还是有所关联的?
回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-8 13:43:12 | 显示全部楼层 来自 北京
本帖最后由 吴聊SP 于 2014-1-8 13:53 编辑
bingga 发表于 2014-1-8 10:55
我正在算一个很简单的静立分析,但是模型很大,已经算了2天了才算到0.5步,可以用iterative试试哈,应该会 ...

可以尝试一下,正好试试效果。
P.S. 头像我很喜欢,CatShit One如果在国内上映了,记得告诉我一声哈
回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-8 13:43:46 | 显示全部楼层 来自 北京
toosky 发表于 2014-1-8 11:02
原来都一直用的是软件的缺省设置直接法,有机会可以尝试下迭代法,谢谢版主的分享 ...

不客气,软件只是为了保证有结果,至于准不准确是使用者说的算
回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-8 13:49:07 | 显示全部楼层 来自 北京
xywang52 发表于 2014-1-8 11:21
刚好在复习数值分析,帮版主细化下,不严谨或是错误之处求亲拍
我手上这本书讲解线性方程组解法就 ...

正在复习数值分析哈,不错,貌似我自从N年前学完数值分析后就没太用啊,看来温故而知新是绝对的真理!

至于迭代,你可以看到我发的那个问题图片中还有一个全牛顿(Full-Newton)和准牛顿(Quasi-Newton),看看你有没有时间继续给补充一下呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-8 13:50:18 | 显示全部楼层 来自 北京
qianmu 发表于 2014-1-8 11:41
选择直接法还是迭代法来求解方程,和选择牛顿或者其他方法来进行分析之间,是相互独立的还是有所关联的? ...

仔细看我说明中的个人理解部分就能得到,你说的那个是独立的
回复 不支持

使用道具 举报

发表于 2014-1-8 15:05:10 | 显示全部楼层 来自 上海
吴聊SP 发表于 2014-1-8 13:43
可以尝试一下,正好试试效果。
P.S. 头像我很喜欢,CatShit One如果在国内上映了,记得告诉我一声哈
...

猫屎一号哈哈
回复 不支持

使用道具 举报

发表于 2014-1-8 15:49:14 | 显示全部楼层 来自 新加坡
xywang52 发表于 2014-1-8 11:21
刚好在复习数值分析,帮版主细化下,不严谨或是错误之处求亲拍
我手上这本书讲解线性方程组解法就 ...
  1. 比较遗憾的是,我们操作有限元软件很难知道当前计算方程组的病态程度,像我们把网格画的细一点,规整一点,一个原因就是尽量减轻方程组的病态。
复制代码
xy所言极是,平时做有限元分析之时,很难预测刚度阵是否病态矩阵,除非输出刚度阵,导入matLAB等软件处理下求出条件数。
回复 不支持

使用道具 举报

发表于 2014-1-8 21:29:35 | 显示全部楼层 来自 四川成都
好帖子,虽然自己编程做过消元和迭代解方程组,看了才和软件联系起来。
回复 不支持

使用道具 举报

发表于 2014-1-8 22:30:14 | 显示全部楼层 来自 北京
吴聊SP 发表于 2014-1-8 13:49
正在复习数值分析哈,不错,貌似我自从N年前学完数值分析后就没太用啊,看来温故而知新是绝对的真理!

...

这个N年耐人寻味啊,N越大,说明版主资历越深O(∩_∩)O哈!
至于牛顿法和准牛顿,书上没有涉及,关键考试也不考,估计牛顿本人理解最深刻了
回复 不支持

使用道具 举报

发表于 2014-1-8 22:32:44 | 显示全部楼层 来自 新加坡
xywang52 发表于 2014-1-8 22:30
这个N年耐人寻味啊,N越大,说明版主资历越深O(∩_∩)O哈!
至于牛顿法和准牛顿,书上没有涉及,关键考试 ...
  1. 牛顿法和准牛顿
复制代码
我学数值分析的时候,牛顿法还是考的
回复 不支持

使用道具 举报

发表于 2014-1-8 22:39:11 | 显示全部楼层 来自 北京
zsq-w 发表于 2014-1-8 15:49
xy所言极是,平时做有限元分析之时,很难预测刚度阵是否病态矩阵,除非输出刚度阵,导入matLAB等软件处理 ...

现在有限元软件好像评估模型的好坏,主要是通过网格质量来判定的,版主觉得有没有可能说,软件再发展下,更深层次的从诸如方程组的病态程度等特性去评价,校验模型时候,我们直接可以看到刚度矩阵的条件数
回复 不支持

使用道具 举报

发表于 2014-1-8 22:41:01 | 显示全部楼层 来自 北京
zsq-w 发表于 2014-1-8 15:49
xy所言极是,平时做有限元分析之时,很难预测刚度阵是否病态矩阵,除非输出刚度阵,导入matLAB等软件处理 ...

不过再想下,计算条件数应该不是特别困难,之所以有限元软件都没有这样输出,是不是说即使输出了条件数,但是不够直观,就算条件数很大,也不好指导修改模型。

点评

yeah,赞同  发表于 2014-1-9 07:49
回复 不支持

使用道具 举报

发表于 2014-1-8 22:56:45 | 显示全部楼层 来自 北京
zsq-w 发表于 2014-1-8 22:32
我学数值分析的时候,牛顿法还是考的

看来咱们在几门数学课中都选了数值的哈,牛顿法是要考,在非线性方程组解法部分。至于全牛顿和准牛顿的区别就不知道了( ⊙o⊙ )?
回复 不支持

使用道具 举报

发表于 2014-7-29 10:01:31 | 显示全部楼层 来自 河北秦皇岛
大咖们聊天就是不容易懂,哎,研究研究
回复 不支持

使用道具 举报

发表于 2014-7-29 12:20:39 | 显示全部楼层 来自 甘肃兰州
数值分析课中讲过,直接法的计算量与矩阵规模的三次方成正比,而单步迭代的计算量与矩阵规模的平方成正比。所以通常规模越大,迭代法的计算效率越明显。但如果矩阵严重病态,迭代收敛速度极慢,将导致大量次数的迭代才能收敛或者根本不收敛,此时迭代法可能比直接法更慢。
回复 不支持

使用道具 举报

发表于 2014-7-29 14:10:17 | 显示全部楼层 来自 江苏常州
迭代法全称为迭代式线性方程求解法这个是不是abaqus里才这样叫的?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 01:42 , Processed in 0.058243 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表