顾旭东 王市委 张援农
摘要科学计算方法是一门面向理工科本科生的、具有广泛用途的专业基础课程,主要涉及线性及非线性方程的求解、插值与拟合、数值积分和微分方程的求解等过程所需的数值理论和方法。计算机技术的提升和算法的创新推动着科学计算的迅猛发展,因此科学计算方法课程的教学方法也应及时调整以适应当前本科生教育。文章以科学计算方法本科生课程的开设作为实践基础,从理论和实验教学两个方面对教学方法进行了探讨。针对当前本科生教育发展的需求,结合科学计算方法课程的特点,所探讨的方法在教学活动中的得以运用,提升了学生的自主学习兴趣,提高了学习效率,而且能够学以致用,取得了良好的教学效果。
关键词 教学方法;科学计算;探讨与研究
中图分类号:G424文献标识码:ADOI:10.16400/j.cnki.kjdk.2023.12.038
科学计算是指应用计算机,基于适当的数值方法编写程序求解科学研究和工程技术中所遇到的数学问题。在现代科学和工程技术中,经常会遇到大量复杂的数学计算问题,且用一般的计算工具来解决非常困难,而用科学计算来处理却非常容易[1-2]。在我国“东数西算”大战略的背景下,运用科学计算解决科学研究和工程技术发展中遇到的关键性问题,显得尤为重要,有望带来巨大的经济效益,同时带动科学技术本身发生根本性变化。
科学计算主要包括建立数学模型、建立求解的计算方法和计算机实现三个阶段。建立数学模型是指依据学科理论对所研究的对象确立一系列的量化关系,即数学公式或方程[3-4]。数学模型一般包含连续变量,如微分、积分、偏微分方程等,这些不能在计算机上直接处理。为此,需要进行离散化处理,即把问题化为包含有限未知数的离散形式,然后寻找数值求解方法。计算机实现包括编制程序、调试、运算和结果分析等一系列步骤[4-5]。依据数值算法,使用程序语言(如C/C++、Fortran和MATLAB)和软件工具编写程序并调试。之后的工作主要依靠高性能计算资源和数据分析处理系统作为支撑,从而完成求解过程。在科学计算中需要物理、数学与计算机等多学科的充分交叉融合,做到物理建模、计算方法、并行算法、软件研制和高性能计算机等方面的有机结合。
科学计算方法是一门面向理工科本科生,具有实际用途的专业基础课程,主要涉及线性/非线性和偏微分/微分方程的求解、插值与拟合、数值微积分等基本的数值理论和方法。随着计算机技术的发展,在数值计算课程教学方法上出现越来越多的探讨,为课程教学提供了有益的参考[6-16]。本文以科学计算方法本科生课程开设的具体实践为基础,从理论和实验教学两个方面探讨教学方法,有助于对科学计算方法的本科生教学提供有意义的指导和参考。
1科学计算方法课程安排
在新工科培养方案中,科学计算方法等专业基础课程的学时被进一步压缩,安排的授课时间减少三分之一。在科学计算方法有限的学时中,按照4:3的比例,我们开展理论教学32个学时,实验教学24个学时。理论教学主要包含预备知识、非线性方程解法、线性方程组的数值解法、差值与多项式逼近、曲线拟合、數值积分、微分方程求解和偏微分方程数值解,共计8个部分。实验教学为集中时段内的上机实验,其目的是在进一步巩固科学计算的方法和原理的基础上,掌握如何通过计算机编程完成特定科学计算任务并实现结果的输出。为减少编程和上机实验的难度,选择MATLAB语言作为科学计算方法教学的支撑,可以满足从算法的实现,到结果的图形化输出等需求。使用了国外计算机科学教材系列丛书中的《数值方法MATLAB版》为本课程的教材,紧跟当前国际上本科生科学计算方法的教学内容水准。
2科学计算方法课程教学方法探讨
2.1理论教学方法
科学计算方法理论教学重点讲授科学计算所涉及的方法和原理,主要目的是让学生掌握计算中需要用到的解方程、数据插值和拟合以及数值积分等相关技能。针对有一定学习基础的理工本科生,相对于传统的理论教学方法,科学计算方法理论教学作了如下四个方面的尝试:
①尝试对教学顺序作出适当改变,以利于用分类、对比的方法进行理论教学。重新划分了知识点,梳理了授课内容,制订了详细的授课方案。
②尝试在与计算机编程有关的讲解中,重点介绍程序编写、表达式和语法上相对于C语言的差异,侧重于数据的格式化文件输出和结果的图形化输出。
③尝试结合实际案例对知识点进行详细讲解,引导学生从更深层次思考该课程的作用和意义,提高学生的兴趣和学习积极性。
④尝试在数值计算核心算法讲解中,重点介绍原理以及实现途径,结合流程图展示程序实现的步骤,详细分析核心程序代码,明确编程规范。
在满足科学计算方法教学大纲要求的前提下,基于以上理论教学方法对教学思路进行了如下的调整:
①为了能够在既定的课时里完成教学任务,达到教学目标,首先适当改变课程教学顺序,对知识点进行了重新划分,如图2(p118)所示。在此基础之上,对授课内容进行了重新梳理,制订了详细的授课方案。在解方程部分,把非线性方程、线性方程、微分方程和偏微分方程的数值算法调整在一起,依次讲授,既把它们之间的区别清晰地讲授清楚,又特别指出它们之间的联系;插值和拟合放在一起进行详细讲授,使学生掌握数据分析和处理的基本方法;积分部分在数值计算中也占有非常重要的地位,由易到难,从五个部分分别进行讲授。尽管教学顺序与教材目录排序不一致,但是通过分类、对比的方法进行上述教学活动,显著提高了教学成效。
②授课的对象为具有C/C++编程语言基础和计算机编程思维的理工本科生,因此在讲授MATLAB基础的时候,重点介绍程序编写、表达式和语法上相对于C语言的差异;另外,重点讲授计算结果在MATLAB中的输出方法,包含数据的格式化文件输出和结果的图形化输出,为后续科学计算方法的上机实现打好基础。
③结合实际案例对知识点进行详细讲解,提高学生的学习兴趣,巩固相关的知识点,下面以三个具体知识点的讲授方法为例详细给予说明:
④往往计算机编程的程序算法与科学计算的理论方法不完全一致,这给学生的学习带来一定的困难,甚至出现学生在良好地掌握了理论方法后,依然在构建编程算法的时候“无从下手”。本课程最终需要落实到数值计算核心算法的讲解,同时注重结合算法流程图,讲授算法的具体实现过程。一方面增强学生对算法的深入理解,另一方面可以为后续的上机实验作好准备。主要涉及算法具体为求解非线性方程的二分法、牛顿法和割线法,求解线性方程的三角分解法和迭代法,解微分方程的欧拉法、休恩法和龙格库塔法,解偏微分方程的差分方法,用于插值的拉格朗日和牛顿法,用于拟合的曲线拟合和样条函数法,以及用于积分的梯形、辛普森、布尔、组合积分和龙贝格法。针对每一种核心算法,给出对应的实现流程图,分析程序算法每一个步骤与理论方法的对应关系,培养学生的编程思维能力。
2.2实验教学方法
当前学科的发展和人才培养的要求,给本科生实验教学提出了新的任务和要求。其指导方针是借鉴世界一流大学拔尖人才培养博雅型教育和研究型学习的理念,依托学科优势和高水平的师资队伍,贯彻宽口径、厚基础、强能力的方针,大胆探索,逐步形成具有显著特色的培养模式。为了达到上述目标,科学计算方法的实验教学也做出积极的改变,采取了与以往本科生实验明显不同的教学方法。实验教学相对于理论教学更加开放和灵活,因此以任务驱动的方法来进行。以计算方法实践为目的,将实验内容依据知识点以及它们之间的联系分解为若干子任务,明确每个任务的基本要求,给予学生自由选题的机会。这种方式有利于学生将本课程所学的科学计算方法和其他课程所学的数学、物理方法及编程等知识进行综合运用。与具体问题情景相联系,有利于激发学生的实践热情和创造力,并培养学生“发现问题―分析问题―解决问题”的能力。
实验需要针对具体的问题使用算法编程实现,并且给出数值结果。要求学生学会模块化编程的思想,把每一个核心算法编写成函数,在编写主程序时调用核心算法函数,运行得到结果。在此过程中,学生可以把编写的函数与MATLAB函数库中具有同样功能的函数运行结果作对比,确保所写核心算法的正确性。实验评价以任务完成情况作为主要依据,学生需要提交详细的实验报告,包含代码、运行结果和小结。具体的做法是根据实验教学目标,拟定实验任务,分别对应方程求解、插值与拟合以及积分的相关知识点。要求学生能够独立完成每一项任务,可以查阅课本、讲义,也可以参考网络课程资料,但是知识点相关算法代码必须自己编写。在上机实验过程中,充分发挥学生的“主体”地位,实验教师围绕任务目标来展开指导,学生独立完成具体的子任务来达成实践目标。
3结论
在深化本科生教学活动改革的背景下,为适应本科生科学计算方法教学的新的要求,我们在具体的教学中作了诸多有益的尝试。以本科生科学计算方法课程开设的具体实践为基础,本文从理论教学和实验教学两个方面探讨所运用的教学方法。上述方法已成功运用到具体的教学活动中,取得了很好的教学效果:
①学生对科学计算方法课程产生了浓厚的学习兴趣,直接提高了学生出勤率和学习的效率,在压缩了学时之后仍然能够在规定的时間内有效地掌握既定知识点。
②学生能够把所学的知识及时运用于科学研究、毕业设计等后续的工作之中,学以致用,取得了良好的反响。
综上所述,随着当前大学生心理和素质的变化,在理工科科学计算方法教学活动的过程中通过一些有益的教学方法的调整,能够有效解决当前教学过程中面临的“死气沉沉,照本宣科”的状态,促使学生对本课程产生浓厚的学习兴趣,愿意在算法原理的学习到实践编程上投入学习时间,优质高效地掌握科学计算方法。更重要的是学生可以学以致用,能够在面临具体问题时,运用该课程所涉及的计算方法来解决。当然,未来需要授课老师们依据形势的变化,丰富更多的案例,并进行更多的尝试和努力,共同推进科学计算方法的本科生教学活动。
*通讯作者:顾旭东
参考文献
[1]李庆扬.科学计算方法基础[M].北京:清华大学出版社,2006
[2]John H. Mathews.数值方法(MATLAB版)(第四版)(Numerical Methods Using MATLAB Fourth Edition,国外计算机科学教材系列)[M].北京:电子工业出版社,2017.
[3]刘钦圣.数值方法教程[M].北京:冶金出版社,1998.
[4]关治.数值分析基础[M].北京:高教出版社,1998.
[5]白峰杉.数值计算引论[M].北京:高等教育出版社,2010.
[6]谢治州.“数值分析”实验教学的实践与探索[J].实验室研究与探索,2010,29(5):133-136.
[7]谢冰,鲁兴举.信息化手段在"数值分析方法"教学中的应用探索[J].教育教学论坛,2022(17):157-160.
[8]温和,滕召胜,唐求,等.可视化教学方法在电气信息类数值分析课程中的应用[J].计算机教育,2010(19):151-153.
[9]方春华.数值分析课程教学方法与手段的实践与认识[J].湖南理工学院学报(自然科学版),2016,29(2):92-94.
[10]闵杰,李义宝.高校《数值分析》课程组合式教学方法探索研究[J].高教论坛,2010(6):72-74.
[11]金炜枫.课程参与式教学研究——以《土木工程数值分析方法》为例[J].教育,2020(21):47.
[12]别敦荣.大学教学方法创新与提高高等教育质量[J].清华大学教育研究,2009,30(4):95-101,118.
[13]代丽娴.《数值分析方法》课程教学改革探讨[J].教育与职业,2006(26):135-137.
[14]何满喜.数值分析课程教学的几点体会及研究[J].中国大学教学, 2011(3):54-55,49.
[15]胡嘉瑜.卓越教学视角下大学理论教学问题及对策研究[D].重庆:西南大学,2020.
[16]孟凡.本科研究性教学的理论与实践研究——以华中科技大学江建军教授的教改实践为例[D].湖北:华中科技大学,2007.