数力计分享 http://blog.sciencenet.cn/u/baibing

博文

工科专业“有限单元法及程序设计”课程改革新思路

已有 5736 次阅读 2010-8-15 12:21 |个人分类:编程|系统分类:教学心得

以下内容 选编自 本人 教改小文《工科专业“有限单元法及程序设计”课程改革新思路》(理工高教研究,2009.10),完整的论文参见附件。

         随着科学研究的精细化程度和规模的不断提高,以及计算机科学和技术的不断进步,计算已经同理论、实验鼎足而立,成为人们认识客观世界的第三种手段。计算技术的核心之一为计算软件,它是计算方法的程序代码实现。特别是其中的数值计算方法已日益成熟,并形成了许多或者是商业或者是开源的软件包,极大地方便了人们利用计算技术进行科学研究和工程计算。在众多的软件中,基于有限元数值计算方法开发的大型软件更是如雨后春笋,在工程和科学计算中占据了极其重要角色。
        有限元方法及其程序设计涉及了数学与计算机科学等多个学科分支,例如微分方程理论、泛函分析、变分法、计算方法、数学力学、编程语言、软件开发等,即使计算数学专业的学者,想在每一个环节上都非常精通也是极其困难的。工科学生虽然不需要理解有限元法的每一个环节特别是涉及计算数学理论的环节,但是,无论是为了用好有限元软件并对计算结果给予正确的分析,还是自己开发有限元程序,都必须熟悉有限元方法的理论和程序设计技术。
        然而,当前工科专业有限元法及程序设计的教学效果并不理想。本文在对当前工科专业有限元及程序设计的教与学分析的基础上,结合笔者自身学习和使用有限元方法的经验,提出这门课程改革的新思路。

  一、工科本科“有限元教学”存在问题及其原因分析

        教学实践表明,学生在选择一门课程时,通常具有很好的态度,并且对这门课程抱有极高的期待。这反映了学生对知识的渴求及其认真的态度。然而,随着课程的进行,一些学生则开始表现出一些消极行为,原因是多方面的,但主要的无非是学生自身、教师和课程这三方面的原因。笔者认为,当前工科专业本科阶段的有限元教学自身及其同研究生阶段应用的结合上都存在问题。依据笔者的观察,课程结业时反映这门课程“枯燥难懂、不知所云”的学生不在少数,甚至一些学生在课程结业时坦然“没有真正弄懂有限元究竟是什么”、“只有一个大致的模糊的概念”。本节对这些问题进行归纳并分析其原因。
  1.“自下而上”的学习,只见树木不见森林
        正如前文所述,当前工科专业本科阶段,通常是从本专业切入有限元教学。例如,土木工程专业,很可能在结构力学、弹性力学的基础上,介绍钢筋混凝土的有限元分析。基于结构力学和弹性力学的有限元,尽管一开始具有一定的直观,但是,学生却面临着大量的细节,比如,整体与局部坐标的变换,节点力和节点载荷的分析,节点和单元的编号,形状函数的构造与推导。然而至于为什么会有形状函数,为什么要引入局部坐标系及其变换,什么情况下又不需要变换,单元和节点究竟该如何编号才最合理,学生不可能一下子理解这么多细节概念,但是这些细节的困难却时刻困扰着学生的心理,而且教师布置的作业却很可能全是训练这些细节的习题。这样,学生难以从整体上理解有限元的一般本质,却又不得不淹没在众多的细节推导中,只见树木,不见森林。
        这种有限元方法的教学模式,本质上是一种自下而上的模式,“是”指学习的细节,“上”是指有限元方法的本质、全局。这种方式很难让学生在较短的时间内从整体上把握有限元方法,这直接导致学生在学习过程中没有原则可以遵循,淹没于非本质的细枝末节的推导中,反而增加学习负担,效果不好。
        笔者认为,应该在本科阶段的课程中就介绍有限元方法的一般原理,从微分方程求解的角度引入有限元方法,这是有限元方法教学的纲,抓住了这个纲,学习起来就有原则可以遵循。在介绍完一般的数学原理之后,再将本专业的有限元问题作为特例进行介绍,这样不仅丰富了有限元一般原理的认识,也同时兼顾了专业的特殊需求。这种教学方法,笔者乘之为“自上而下的教学”,这是符合学生的认知规律的。当前工科院校本科阶段很少采取这样的教学模式式,一个重要原因可能是考虑到有限元的理论基础涉及到大量的数学知识,本科阶段学生可能数学知识储备不够从而难以接受。笔者认为,采取上述的教学模式,并不在于讲解多少数学知识,关键的是这种教学模式本身能够从本质上理解有限元方法,有了这种理解之后再去学习本专业具体的有限元方法就不会产生一些概念上、原则上的疑问,使得学生能够首先从总体上把握有限元。事实上,如果采取以虚位移原理作为有限元方法推导的基础,并不要求学生掌握过多的数学知识,并且本科阶段,学生也是完全有能力接受的。
  2.理论与程序脱节
           当前,不少本科阶段的教学中比较重视有限元理论知识的教学,但对有限元程序的教学并没有给与足够的重视,甚至使得编程教学环节形同虚设,其原因是多方面的。首先,由于教学时间的限制,在短短的课时内完成有限元编程的教学是非常困难的;其次,有限元编程的教学对教师的素质提出了较高的要求,通常要求教师具备有限元程序的开发经验,或者至少熟悉一套有限元程序代码,而仅仅具有大型商业软件的使用经验是远远不够的;第三,程序代码的阅读、编写和调试枯燥而乏味,很难在短期内掌握,甚至许多本科生认为这超过了本科阶段的教学要求;第四,缺少权威的程序代码。第五,理论知识和程序代码之间的教学缺乏衔接,或者二者难以对应,使得学生感觉,从理论到代码还有十万八千里。
        这些原因导致了有限元理论教学和编程教学的脱节。事实上,笔者认为,有限元理论和编程实践同等重要。从理论到程序实现,其间仍然有很大的障碍需要跨越,熟悉有限元理论未必能够编写出良好的代码,相反,能够编写高效的代码则必须掌握扎实的理论。这两者之间具有互相促进的作用。
  3.灌输式教学—学习缺乏自主性
       有限元理论和程序设计具有很强的实践性。特别需要学生的积极参与,尤其是在源代码的阅读、编写和调试上。在教学中应该以学生为中心,激发学生学习的自主性,而不能以教师为中心,应千方百计避免教师花费大量时间在课堂上“独角戏”式的灌输式教学。
如果课程的设计能够充分调动学生的积极性和参与意识,让学生多上机,多实践,主动去探求有限元理论及其编程的技巧,最终的学习成功必将对学生产生积极的影响。教师只需要做好课程设计、答疑和引导作用。例如,对关键内容进行讲解,适时答疑,推荐源代码快速阅读分析的方法、工具和经验,以及具体的程序设计技巧等。
  4. 课程设置不合理
       有限元方法及其程序设计课程是一门对理论和实践均有较高要求的课程,需要多种知识的积累和熟练运用。因此,如果预修课程不合理,对于这门课程的学习是极其困难的。笔者认为,本科阶段,这门课程之前应该预先安排如下课程:变分原理初步、数值计算方法(或科学计算与数学建模)、编程语言(如FORTRAN或C/C++等)、弹性力学等。并且在课程讲授过程中必须结合学生的知识结构组织教学材料,而不能仅从教师易于讲授的角度组织材料。例如,有的单位土建类专业没有安排弹性力学课程,但是在后续的有限元的教学中,教师主要以弹性力学的有限元方法为授课内容,其授课效果是可想而知的。
  5. 代码不权威、难复用
       实际教学中,许多有限元教材并未配套完整的源代码,即使个别有配套代码的,则往往很零散,功能很弱。也有一些教师采用了自编的教学代码。这些源代码普遍存在以下问题:
(1) 功能很弱,常常是二维的,具有很大的局限性,难以通用,不可复用;
(2) 代码不权威,甚至有较多的bug,可信度低;
(3) 程序代码和教材理论不匹配,让学生难以对照学习;
然而为了分析和学习这些源代码,学生同样要花费大量的时间和精力,一旦课程结束后,这些代码对其将来的研究几乎没有作用。因此,一些学生不愿意花费时间去学习一套不权威、不太信任并且在将来难以应用的源程序。

二、基于权威开源软件和代码-理论融合的探求式教学法

        本科有限元的教学目的说到底就是希望在有限的教学时间内,让学生高质量地学懂有限元理论和程序设计。具体而言,笔者认为应该达到以下目标:(1)有限元知识应该是系统的,应该给学生形成这门课程完整的知识结构,在其将来的有限元应用中,不必重新系统学习,而只要根据需要补充相应的部分即可;(2)教师能否为学生尽快学懂这门课程节省时间;(3)课程的教学应是可持续的,即学生应当掌握一套权威的源代码,具有程序修改的能力,并且对其将来的专业科研上应用有限元具有直接的作用。
         前文分析了当前有限元程序法及程序设计中存在的问题及其原因,笔者认为,为了提高有限元教学质量和效果,如果能够提出并设计一套新的课程教学和改革的思想和方案,兼顾上面存在的问题,就可以很好地解决这个难题。
       下面提出基于权威开源软件的代码-理论相融合的探求式教学思想,主要包括以下要点:
(1)程序代码和理论同等重要,二者的学习是相互促进的。只有理论和代码皆通,才可以自由地使用有限元法进行科学研究。
(2)理论和代码学习是相互促进的,表现在,既要通过理论阅读代码,也可以通过代码反映理论,加深理论的理解。
(3)开源代码应当是通用的、权威的,并且具有较高可信度。通用是指能够适用于多个学科领域,具有较广的适用范围,有利于将来进一步研究、开发和应用。
(4)通过理论学习代码,通过代码反映理论,这两个过程的教学均是探求式的,需要在老师的指点下,由学生主动去挖掘其相互关系。让学生充分体会到“在学习中发现”以及“在发现中学习”的快乐。
        事实上,随着网络的不断发展和网络资源的不断丰富,世界各地学者共享经验已经成为可能。许多著名学者都在网络上公开了有限元的教学资源,特别是有限元程序源代码。

        笔者认为,程序代码是一个巨大的知识仓库,它本身不仅蕴含了丰富的有限元理论知识,还包含了大量的程序设计开发技巧,它本身就是个现实的活着的有限元技术。代码的选择先要有权威性;第二,软件架构上要有一定的通用性,能够适用于多个学科领域;第三,代码要便于拓展和维护,最好有较好的注释文档和开发说明;第四,代码所用的程序设计技术最好不要超过学生本科程序设计课程,这是因为,随着计算机软件技术的发展,大量的软件开发技术被应用到有限元大型程序的开发中,这些技术许多是为了提高性能和程序的易用性而引入的,并不反映有限元理论的本质,因此对于有限元教学是不合适的。

       上述教学思想,对教师、教学方法和培养方案的安排提出了新的要求。首先,要求教师至少熟练掌握一套权威的开源软件。其次,要求教师具有代码分析的经验和能力,在教学中以学生为中心,充分调动学生探求式学习的积极性,在必要的时候给予指导。第三,教师在教学过程中,必须千方百计克服学生长期以来形成的对数学知识和源代码阅读的畏难情绪,因为这些其实只是心理误区;第四,为了配合这种教学思想,还需要在培养方案上作些调整。这些调整包括:
(1)增加学时,变成两个学期的课程,但有限元理论和程序设计仍然作为一门课程由一个老师教授;第一学期讲授最基本理论,第二学期进行代码和理论互逆分析。
(2)增加预修课程,如《数值计算方法》、《变分法初步》等。
(3)出版与代码阅读配套的教材,便于学生对照学习。


完整论文见 后:


工科专业“有限单元法及程序设计”课程改革新思路.pdf

https://blog.sciencenet.cn/blog-58025-353215.html

上一篇:钱伟长先生,我们永远怀念您
下一篇:CCS研究网站
收藏 IP: .*| 热度|

2 郁章涛 魏东平

发表评论 评论 (5 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-25 12:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部