毕小喵:为什么说王勖成版《有限单元法》是本烂书
这本书真的厚。这么多年,不知道它劝退了多少中国的理工科学子。
举几个具体例子说明,为什么我认为王勖成版的《有限单元法》是本烂书。
不可否认这本书在特殊历史时期发挥了极重要的作用,
但在今天,它已经非常不适合用于入门学习,
只适合给已有足够知识基础且已经熟悉这本书叙述结构的从业者作参考。
开头叠甲
如题。
写这么负面、这么敏感的主题,开始正文之前必须先叠甲。
清华当然是中国排名第一的高等学府。我没上过清华,以我的水平,至少在高考时也确实上不了清华,差距有大几十分呢。
在上世纪末、本世纪初,王勖成教授这本《有限单元法》想必是当时中文世界里 内容最全面、覆盖面最广的介绍有限元法的教材之一。这本书为国内有限元相关人才培养起到了很大作用。(虽然我感觉后来也一并因为写的太艰深晦涩劝退了好多人)
参考链接:
黄克智:我与清华固体力学-清华大学
https://www.tsinghua.edu.cn/info/1890/75153.htm
后面我要说这本书的不好。我要先承认我自己的有限元理论水平达不到王勖成老师的高度,未来可能永远也不会达到。
我说一道菜炒的不好吃,它确实是不好吃。这可以很客观,因为我或许能跟你说它确实是没炒熟,有点夹生了,还没放够盐。我甚至可能还可以拿半成品下厨给你炒一道更好吃的菜。但你如果让我和这本书一样,从种菜、洗菜、切菜到炒菜给你做出一盘好吃的菜出来,我没这能力。
但你在此位置,国家指定由你来给大家炒菜,炒出来的菜要给一届又一届的学生吃。那你如果炒的不好吃,就会有很多人认为这道菜本身口味就是这样,不是菜的问题而是自己口味不适合。这就让很多人对这道菜敬而远之,无法吸收其中的营养成分,不能茁壮成长,建设国家。
如果是历史原因,当年的锅不好,菜谱不全,所以炒出来的菜不好吃,可以理解。但现在我们条件好了,学习资料丰富多了,我要说的是:不要再去吃当年那道炒的不好吃的菜。
我这篇文章讨论的,仅仅是说对于今天的学子来说,这本书已经不适合用来入门学习了。因为有太多更好的学习资料可选。
这本书,我一开始学习的时候,确实是几乎一个字都看不懂。现在我终于能看懂了,但不是靠和它“相面”看懂的。我是从别处,用了其他教材攀上了有限元的这座山,回头再看它走的路,才看懂的。这本书给学习者指引的,可真是一条荆棘密布、最为难走的登山路。
可能我举的例子、我说的内容也有不当之处。如果有大佬读到这篇有不同意见,愿意不吝赐教,毕小喵感激不尽。只要言之有物,就是有益的交流。
——好,我能想到的可以叠的甲就这么多。那么下面开始正篇。
——我要开骂了。
第1章-开篇暴击
王勖成老师的这本书,从前言可以看到,其从1990年列入清华重点教材建设计划,2002年完稿于清华校园。在第0章绪论里,作者自己明确了,学习有限元法的目标有两种。一种是为了用有限元解决工程问题,另一种是在有限元的理论方面做研究。两者不矛盾,但后者需要在理论上更加深入。
但是……这本书开头第1章,写的就实在是太过于炸裂了。
我们来看一看1.2节,在开篇说完引言以后,书里给出的第一个公式:
其实,这一段我自己是可以看懂的。我在我录的和讲的课程里面都详细讲解了我对这个步骤的理解(当然不是用的这本书,我不至于给自己找虐)。我讲的课……暂时因为一些原因还未能公开,以后有机会再说。不过我还是想先问一问在座的各位读者,你看到第一个公式 A(u)={}这一坨列向量的时候,你能不能看明白他这一坨东西其实是个微分方程组?
第一章开头讲的这部分内容,加权余量法和变分原理,别的学校我不太清楚,我是在专门一门课《偏微分方程数值解法》上面学到的。我相信在座的各位,你们大一学的高等数学里 应该都没讲过超过一维的偏微分方程和边界条件之类的东西吧。
是,我承认你在第二页里解释了,A,B表示对于独立变量(空间、时间坐标)的微分算子(有多少这本书的工科生读者大三一上来就知道啥是微分算子的,来举个手)。也解释了为什么(1.2.1)要写成矩阵形式。但就这东西毫无预兆的怼在一本书的第一章,你觉得合适吗?
有人说,第一章用热传导方程来介绍有限元的概念,对于学力学的同学来说不够熟悉。我并不这么认为。事实上,热传导方程由于待求变量只有一个温度,不像力学控制方程那样还涉及位移、应变和应力的转换,它更适合用来独立阐述有限元的求解思想,而无需引入几何方程、本构方程等“本质上属于力学领域而非有限元”的概念。我觉得第一章用热传导方程讲有限元的解法还蛮好的。
但是,咱都不说一本好书应该怎么样,要求放低一点,一本想让正常人类能看得下去的书,至少要稍微由浅入深,循序渐进,请君入瓮,关门打狗才对吧。你一上来就怼这种通用形式……
敢不敢稍微变一下顺序。比如一上来先循循善诱:同学你看,这里是一个热传导方程。我们先用加权余量法的思想求解一下它。把这个流程走完,每一个步骤解释清楚,再把特例总结为一般规律。
这么写很难吗?不,王老师可能觉得清华的同学们都是天才,上来直接写最抽象的一般规律才符合这类天才的认知逻辑。
王勖成这本书第一章的行文逻辑是这样的。1.2.1节,介绍了(偏)微分方程的等效积分形式。1.2.2节,介绍了做过分部积分之后的弱形式,以及自然边界条件、强制边界条件。1.2.3节,讲了如何把求解弱形式方程变为求解有限多个系数的方法:加权余量法。
1.3节,变分原理和Ritz法;1.4节,弹性力学基本方程、张量形式和变分原理。这一章可吐槽的地方实在是太多了。根本写不完,就选几个地方聊吧。
首先注意,1.2节这里原书写的就是微分方程,实际上它应该是偏微分方程,因为自变量有至少2个,求导符号就变成偏导了。微分方程和偏微分方程,差别还是挺大的。
在1.2.1节,用语言极其简洁的描述性证明了一下欧拉引理:
然后放出了(1.2.8)式,即等效积分形式。
你说你前面明明都举了热传导方程作例子,这里为啥就不舍得再拿热传导写一个具体一点的例子呢?非得把这例子留到后面1.2.2节,在这一页抱着你那抽象的一般形式让读者猜谜是不?
在后面的段落中,寸土寸金的章节里,王老师居然还画了图1.2,解释说明了一下啥叫C0连续性。真是搞不懂,王老师究竟假设读者有怎样的数学基础?是高还是低?是已掌握了泛函分析、偏微分方程和张量的理论,还是只学过高等数学、线性代数?
在图1.2右侧,真正重要的讲解,关于后面为什么要用格林公式对弱形式做分部积分的解释,那写的简直,一塌糊涂。
我因为学过其他很多版本的教材,现在已经能看懂这里了。但我仍然不愿意从他那感觉话都说不利索的字缝中去理解他想表达的那个意思。
后面1.2.3节讲加权余量法,是真的不知所云。这里讲的配点法、子域法、最小二乘法、力矩法……除了伽辽金法以外,你告诉我它们有什么用?哪个有限元理论和软件用到了伽辽金法以外的东西?
你有这篇幅,有这功夫,敢不敢把前面后面真正有用的地方,稍微展开介绍的更详细一点啊?后面那么多重要内容惜字如金,为啥要在这种和有限元八竿子打不着一撇的地方,占据开头第一章这么大的篇幅?
这就像,你如果是一本专门讲数值计算方法的书,在讲高斯积分之前可以先介绍一下梯形公式、牛顿-柯特斯公式,讲讲这概念怎么演变的。可是你是一本讲有限元的书诶。后面例子伽辽金法精度高,你直接讲伽辽金法就得了嘛。你想说这些东西是“基础”?是个毛的基础,这东西都还没入门呢。要是大家都这么“打基础”,那谁也别往上爬了,都搁有限元理论的大门外面第一级台阶上面雕花算了。
后面1.3节,变分原理和里兹方法,我只能庆幸说我当时不是看的这本书学习理解的这俩概念。我要是指着靠这本“经书”去理解Ritz法,那还是趁早转行吧。
和这些讲不清楚的地方比起来,这本书里的一些不通用的翻译问题,如“笛卡儿”坐标系,“泊桑比”,“结点”等等细节,都不值得拿出来说。
1.4节,写的这内容其实也不是不能看。但这逻辑顺序仍然一塌糊涂。1.4.1节先写应力,再写位移,最后写应变。您好歹从位移-应变-应力的顺序,或者反着来也行啊。您搞这么一出3-1-2反复横跳是干啥。
后面推导,方程跟着矩阵形式混在一起,不清不楚。不过反正大部分学习有限元的同学多多少少提前了解过一点弹性力学,这一节和前面相比还算没那么炸裂。
至于后面的张量形式、虚功原理和变分原理,我就实在是不知道从何吐槽好了。我觉得这部分 要么你就别讲,要讲你好歹讲的清楚透彻一点。写成现在这样,是真的只能给已经懂了的人做个参考。没懂的人想拿这几章来学习,真的就像看天书一样。如果这就是老师您的本意,你敢不敢在书中提示一两本讲的更好更细致的参考书,让同学们去补补课?
如果让我来讲有限元,我的建议就是——今天的同学请务必、一定、完全,避开王勖成老师这本《有限单元法》。千万不要用它来入门,也不要按照它的思路去理解任何一个问题。等你从其他路径入了门,看明白了这些公式背后的含义以后,你愿意回来参考,看看他这本书写的有多烂,那你请随意。
第2章-继续写天书
第一章讲的都是基本方程、变分原理之类的概念。第二章终于见到单元了。有限单元法,最大的特点就是要画网格,要有单元。可惜……这一章实在写的比上一章还要劝退。
就先放三页。怎么说呢,这一章介绍的内容就是非常典型的:你把每一个公式都推导过了,都看懂了,仍然不知道它有什么物理意义。
实际上,有限元的形函数,物理意义是相当明确且好理解的。这里再次推荐一下Comsol多物理场仿真百科。不懂单元形函数物理意义的小伙伴,可以去看一看这一页。看一看别人Comsol是怎么由浅入深,用热传导方程讲解有限元思想的。再看看王勖成这本书。
http://cn.comsol.com/multiphysics/finite-element-method
我承认,前面叠甲时候也说过,王勖成这本书成书于2002年,Comsol百科发布于2016年,不是一个年代的东西。——所以对于今天的学生来说,就更不应该去学王勖成这本书了呀。
总之,第二章讲的,事确实是那么回事,但这个叙述逻辑,别人我不知道,反正我自己 自认作为一个还有一点理解能力的正常人,我不是天才,我看这一章讲的是真的不能从公式里理解到它推这些玩意是打算干啥。
其实,有关单元的这部分概念在后面第三章,讲的更细致,也至少比第二章清晰很多。那这就更有问题了。一本写的好的教材,应该循序渐进,把网状的知识用合理的布局写成线性表述。而不应该在教材里处处是坑,每个坑都得等到讲过后面的概念才填上。这样如果是第一次读教材的人,他可能掉第一个坑里就一直爬不出来了。
好,第二章讲了有限元的基本矩阵列式,第三章讲了其他各种类型的单元(主要就是一维单元、矩形单元、二阶单元等等。这些东西之间安排的逻辑性也不怎么强)。第四章讲等参变换和数值积分方法。虽然写的一直都很晦涩难懂,但总还算是逻辑清楚。
第4章-关于减缩积分的大问题
如果说前面三章,问题都还在于书写的太晦涩,但至少事实层面没啥大毛病的话,第4章等参元和数值积分,讲减缩积分这一节,就真的是问题大了去了。
第4章前面我就不多吐槽了,直接看4.6节,数值积分阶次的选择。
这一章虽然也有非常严重的“你说这个谁懂啊”的问题,但比那更严重的问题是:事实上,减缩积分是由Doherty最早于1969年提出,用于解决剪切自锁和体积自锁问题的。
(这一段截图来自冯元桢先生的英文书《Classical and Computational Solid Mechanics》第736页。这本书我觉得可以放链接,就在下面二维码。冯元桢同时也是生物力学的创始人,葛东云、陆明万两位教授翻译冯元桢先生的《连续介质力学初级教程》写的非常好。我愿尊一声先生。)
你要是说年代,所有这些概念都提出于1970年代。关于剪切自锁、体积自锁,以及其解决方案,包括选择性减缩积分(全部减缩积分会导致零能量模式,即沙漏)、混合位移-压力列式、非协调模式等等,论文都发表于1980年代前后。冯元桢先生这本书也写于2001年,和王勖成同时代。冯元桢先生怎么能写的这么清晰、讲的这么透彻呢。
这还不算完。在瞎扯了一堆不明所以的理论以后,最炸裂的是,王勖成老师在这放了图4.6,8节点二阶四边形单元的零能量模式。
来来来,你猜为什么减缩积分对应的零能量模式,英文要叫它hourglass mode,沙漏模式?那是因为只有一阶减缩积分单元的沙漏模式才值得担心。你在这里放二阶单元的零能模式,那是真的只有数学游戏上的意义,没有一丁点实际作用了。
王勖成老师大部分配图抄的都是辛克维奇 O.C. Zienkiewicz教授的三册开山著作《The Finite Element Method》。但你看看Zienkiewicz教授在这放的配图原图是怎么画的:
这张图后面紧接着就解释了,8节点减缩积分单元的零能量模式(奇异)在多个单元组装时就消失了。
此外,在ANSYS文档如图所示页面上也清晰地写明:
如果模型在二维问题上至少有两个单元,或者在三维问题上每个方向上至少有两个单元,沙漏效应就不是问题,因为沙漏模式很难传播到一个元素之外。因此,(二阶单元)不需要沙漏控制。
所以,王勖成在这偷懒只放一个二阶单元的零能量模式,就是纯纯的在误人子弟。写的这东西从根本上就有错误。
我想问问读过王勖成教材的读者朋友们。有没有一位同学,能通过这本教材的这个章节,看明白减缩积分究竟是用来干啥的?以及,有没有一位同学,能通过这个描述,知道真正在应用有限元软件做计算的时候,什么时候要选择减缩积分,什么时候要小心零能模式?根本不能,因为王老师根本他就没讲。
真正该讲的,对工程应用有实际价值的东西,王勖成是只字未提。
——————
再后面第5章,这里我其实有点不确定啊。王勖成说有限元之所以要在高斯积分点上求解应力,是因为那个地方应力算的最准。
但实际上——如果你使用减缩积分,有限元求解应力的位置还是会放在低一阶的高斯积分点上。说到底,有限元软件在高斯积分点上求应力,只是因为前面列式时,已经使用过高斯积分,计算过高斯积分点处形函数的导数值,后面复用一下而已。
这个知识点我也不是100%确定。我就是觉得王勖成书里写的这个理由有点离谱。如果真是这个原因,那减缩积分的单元,它的应力也应该放在完全积分的高斯积分点上求解才对,为了“精确”嘛。可是实际操作中,应力在单元之间磨平就差不多那么回事了。你要是真想要知道这一点处的应力精确值是多少,老老实实加密网格,避开应力奇异点,获得网格无关解才是最可靠的。
后记
一写这话题就刹不住车,一不小心水了六千多字。其实……如果有读者看不懂我前面说的这些内容,只需要记住一个结论:珍爱生命,远离王勖成版《有限单元法》就行了。
前面提到过的,曾攀老师的书、张晔老师推荐的那本《有限元分析-ANSYS理论与应用》,都可以拿来入门。许许多多优秀的英文书,都比王勖成这本更适合用来精进。我甚至觉得哪怕你用有限元软件去入门,之后生啃ANSYS、Abaqus的理论文档,都比读这玩意强。好歹理论文档写的东西都是ANSYS软件里直接在用的公式。