周茂瑛,王 班
(杭州电子科技大学机械工程学院,浙江 杭州310018)
伴随着计算机的产生和发展,数值计算获得了广泛的关注和研究,并得以大规模应用于工程实践中。数值计算主要关注利用有效位数有限的计算机对数学问题进行近似求解的理论和相应的方法,目的是在充分考虑数值算法的误差、收敛性和稳定性的情况下,在尽可能少的计算资源消耗下实现特定数学问题的求解。数值计算的基本理论与算法和工程实践问题的结合,对工程实践的发展起到了不可估量的作用。由此,目前“数值计算方法”课程已经成为了工科机械、电子和计算机等类别专业普遍开设的一门课程。
在现行的课程体系中,“数值计算方法”定位为一门数学基础课[1],主要讲解数值计算的基础概念,并介绍基本的数值算法和算法设计思路。而随着计算机在工程实践中的地位变得越来越不可或缺,这一定位使得目前的“数值计算方法”课程教学存在诸多问题。首先,过于强调理论分析的内容组织方式使得教和学难度都很大,学生学习效果不佳。其次,目前的课程教学内容与工程实践结合不够,教和学与工程实践脱节。再次,受到课时限制,理论教学、实践案例和计算机编程的结合是目前课程教学的难点。因此,有必要结合工程实践,对该课程的教学进行一定的改革,提高课程的教学效果,反映工程实践特点。
综上所述,“数值计算方法”在工科的课程体系中有重要作用,而面向工科类专业的“数值计算方法”课程教学过程中存在许多问题和不足。
本文首先分析了造成这些问题的原因,然后根据新工科建设对学生能力培养的要求,提出对应的教学改革方案,并针对机械工程学科的实际增加课程中的实践内容,以期能够通过本课程的学习,加深和提高学生利用计算机解决工程问题的认识水平。
在目前新工科建设的大环境下,产业需求和技术发展对“数值计算方法”课程有着重要影响,而学生在教学过程中的主体作用也越来越受到重视。针对这一变化,笔者们梳理了目前“数值计算方法”课程的教学过程中存在的诸如教学内容内在联系不足、教学内容与工程实践脱节、教学方式单一和与编程教学结合不足等问题。
目前“数值计算方法”课程一般采用的教学大纲所包含的教学内容单元包括数值计算的误差及其传播、非线性方程求解、线性方程组求解、函数的插值与拟合、数值微分与数值积分和求解常微分方程等部分[2]。课程内容无法有效覆盖工程中常见的问题,缺乏一些重要的知识单元。除了“误差及其传播”外,其他的知识单元之间不存在明显的逻辑关系。不同知识单元都是相对完整的研究体系,可以在知识的深度和广度上进行拓展。这一特点使得学生在学习过程中很难形成一条主线,很容易在不同知识单元之间疲于奔命,使得教和学的效果都不理想,教师和学生都很被动。
首先,“数值计算方法”课程的教学内容长期没有更新,对工程实践中的案例几乎没有介绍。这种教学内容的设计和编排客观上不利于工科类专业学生的学习。其次,与“数值计算方法”紧密关联的数学建模,主要关注如何将工程实践问题转化为数学问题,是数值计算的前置步骤。而目前工科类专业本科课程中没有专门的数学建模必修课程,导致学生在学习课程时难以结合工程实践形成合理的知识体系。这种背景的缺失影响了教学效率。再次,工科类大部分专业并不会开设算法设计与分析的专业课程,更不会涉及算法的计算机实现等内容,使得学生无法深入了解各类数值计算算法的具体性能和优缺点。
目前“数值计算方法”课程定位为一门理论课程,包含大量的定理推导和证明。这导致目前一般采用静态演示的教学方式,使得学生丧失了学习主动性,只能被动地接受灌输,学习兴趣低。
另外,目前依然采用传统的闭卷考试模式,考查内容以抽象的数学问题为主,考察学生对基本理论的熟悉程度。这一考核方式也在客观上固化了学生对“数值计算方法”课程的认知,无法有效引导学生结合工程实践对“数值计算方法”课程进行学习。
“数值计算方法”中所涉及到的算法需要借助于编程软件进行展现,但是目前根本不重视编程实现环节。一方面,数值计算算法的实现依赖于所选用的编程语言多种多样,使得学生学习负担加重。此外,目前本课程的学时配备不足以支撑同时对数值计算算法和编程语言进行讲解。另一方面,目前的编程实操内容都过于简洁,一般由教师拟定几个简单的与教学内容相关的数学问题,要求学生通过小修小补的编程进行求解。在这种情况下,学生容易陷入特定编程语言的学习,也容易使得学生的编程成为变相的习题求解过程。
针对上文提到的目前在“数值计算方法”课程中所存在的一些问题,充分考虑工科类专业的实际情况,从以下方面进行教学改革探索。
考虑到“数值计算方法”课程主要涉及到对连续模型的求解,可以将所涉及到的知识单元分为四个模块:误差分析、数值逼近、数值代数和数值微分方程。误差分析主要针对基于有限位数计算机的数值计算分析其可能产生的各类误差及其分析方法。其中涉及到数值计算的基本概念和数值算法的评价方法。数值逼近主要涉及不同的数学对象在计算机程序中的近似描述方法,包括数值积分、数值微分和函数的拟合和插值等。数值求根主要介绍非线性方程和线性方程组的求根问题,并介绍与矩阵特征值相关的计算算法。数值微分方程是一个综合的模块,主要介绍常微分方程和偏微分方程的数值求解。
考虑到目前许多工科专业对计算机相关课程涉及不足,在考虑课程内容改革时,笔者们有意识地将这些内容结合在一起,采用分组探索和集中实验的方式来对传统的课堂知识讲解[3]进行辅助,以期提高综合教学效果。
分组探索主要分为教师讲解介绍和学生自主探索两个部分。在教师讲解部分,教师会结合工程实践问题,引导学生建立数学模型,并指出建模过程中所采用的假设等。在学生探索部分,教师提出探索性问题,要求学生进行自主的分组探索和分析。最终,学生需要形成解决方案,形成课程设计报告等文档,对探索结果进行展示和总结。
集中实验的关注点在于学生结合编程语言进行数值计算的能力,要求学生对某一个抽象的数学问题进行编程求解,并最终形成实验报告等文档,对所解决的问题进行展示。这一过程强调的是学生对算法的灵活运用,希望能够提高学生对计算机程序的应用能力。
数值算法的最终反映是计算机程序。学生学习的关键是对于所学习的问题和对应的数值计算算法有一个总体认识。因此,笔者们希望在教学过程中引入交互文本语言。这种语言的好处是可以将程序的执行过程融入到课程演示文本中。这样,在课堂讲解的过程中可以有效融入程序编写和演示的流程。一方面,可以利用这个机会在不影响正常教学流程的基础上向学生教授统一的编程语言,解决学生学习新的编程语言的诸多不便之处。另一方面,能够实时地向学生展示不同的算法的实际执行效果,从而能够更好地向学生进行讲解。
在考核方式上,压缩期末理论考试的比例,增加探索和实验环节,关注学生解决问题的能力,引导学生关注数值计算方法的理论在工程实践中的应用。此外,将程序类作业引入日常教学,要求学生利用编程语言完成作业,并设置一定的开放性作业,考察学生自由运用所学知识和技能的能力。最后,应该在条件允许的情况下允许学生进行开放性作品展示,激发学生的创新动力。
本文针对目前“数值计算方法”的课程教学中存在的问题,以增强学生的分析和解决工程实践问题的能力为目标,结合工程实践问题和交互式编程语言,强调数值计算与编程语言的结合,提出了一些教学改革措施,希望学生能够在学习数值计算方法的过程中充分了解其在工程实践中的应用,培养其创新精神,提高其创新能力。