全星日 许一虎 朱东弼
摘要:Matlab是一门应用性很强的实践性课程,开展项目教学法是比较合理的Matlab教学策略。Matlab项目教学以快速入门、项目贯穿教学全过程的方式展开,在解决项目任务的过程中理解、掌握和综合应用基本指令,将验证性、综合性和设计性融入每个项目任务当中进行深度学习。在Matlab项目教学实施过程中,从实战的角度出发,引导学生对程序进行调试,对实验数据进行分析、讨论和理论验证,以获得项目开发实践经验,并逐步提高学生独立编程能力。
关键词:教学改革;教学方法;项目教学法;程序设计;Matlab
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)34-0111-03
Abstract: Matlab is a practical course with strong applicability, so the PBL(Project-Based Learning) is more reasonable teaching strategy. The PBL based Matlabteaching is carried out in the way of quick introduction and project throughout the whole teaching process. In the process of solving project tasks, basic instructions are understood, mastered and comprehensively applied. Verification, comprehensiveness and design are integrated into each project task for deep learning. In the process of Matlab teaching implementation, from the perspective of actual combat, students are guided to debug the program, analyze, discuss and verify the experimental data, so as to increase practical experience and gradually improve students' independent programming skill.
Key words: education reform; teaching methodology; project-based learning; programming; Matlab
1引言
Matlab是强有力的数学分析工具,在工学中有着非常广泛的应用,如数值计算、算法仿真、数据分析等。Matlab课程后续的信号与系统、自动控制原理、通信原理等专业课中都可以用它进行仿真,加深对专业课基本概念的理解。而且Matlab与其他编程语言有很多相通的地方,学好Matlab可以提高学生的编程技能,加深对“程序”这一概念的理解。Matlab是一门应用性很强的实践性课程,以理论讲授为主、做几个应用性实验的传统教学模式使得学生能够理解基本语法和简单程序,但是当学生需要独立完成项目时往往感到束手无策、无从下手。不能为学而学,从实战的角度提高学生独立编程能力很有必要。
2 Matlab教学中的若干问题思考
2.1 Matlab是一门应用性很强的实践性课程
传统的Matlab教学多采用按照教科书内容按部就班、循序渐进的策略,主要教学内容是Matlab的语法和指令的使用方法。这种照本宣科式教学中,学生处于被动的接收地位,不利于激发学生的主观能动性和创新能力的培养。为了提高教学的趣味性并调动学生的学习积极性,张静亚应用项目教学法提高学习目的性,通过做实际项目,提高学生分析问题和解决问题的能力,采用了图像处理项目[1];易昆南等在数学专业Matlab实验教学中结合音乐中的数学原理,鼓励学生求异思维和发散思维[2];魏为民等提出了快速入门的策略,仅用10学时讲授基本知识,穿插6学时实验完成Matlab入门,采用实例教学法,列举了[π]近似值计算项目[3];毕美华等在Matlab理论教学中针对语法教学的枯燥性,引入了趣味性实例,提高了学生的学习兴趣[4];林海涛采用任务驱动教学法,帮助学生主动学习,在探索中获得成就感[5]。
Matlab教学中引入应用性项目的研究很多,但是对学生实践能力提高的相关研究比较少。有些学校的教学组织形式采用先讲理论课、后上机的两步走方案,这会降低学习效能,而且理论教学中学生处于被动地位,不利于举一反三和发散思维;一些學校做Matlab实验时开展验证性[+]综合性[+]设计性实验项目[6],是否有更合理的方案进一步改进和深化这种阶梯式递进方案使其更适合Matlab教学?很多学生在专业课中用到Matlab时往往感到迷茫,不知道从何处下手,程序出现错误的时候也无法解决,也不知道怎样分析和讨论实验数据,这些都是学生实践经验不足、独立编程能力不够的表现。
2.2 结合深入的专业知识未必是好的教学策略
有些学校做Matlab实验时,实验内容与专业课紧密结合,做与专业知识有关的实验。对理论知识理解透彻的同学,这个教学策略或许是有帮助的,但是对专业知识掌握一般的学生,这一教学策略有可能带来多个学习目标的问题——Matlab编程技能要学、专业知识也要掌握。这部分学生跟着老师做了之后也没领悟到做了什么、为什么这么做,更无法模仿和应用这些做法解决其他类似问题。很多学校开设Matlab课程是安排在低年级,进入专业课之前或与专业基础课程同时进行,这就更不能结合深入的专业知识了。Matlab课程与专业课程紧密相连没有必要、也做不到,学生的理论底子还没上升到那个高度。Matlab教学中可以触碰简单的专业知识,但是提前量不要太大,不要涉及深入的理论,更不要替专业课做实验。信号与系统、通信原理、自动控制原理等很多专业课程中经常使用Matlab做仿真实验,这些实验交给专业课老师指导,对理论知识理解透彻的前提下,Matlab编程才有意义。
本文认为Matlab尽量在低年级开设,Matlab在专业课程群中的定位应该是单纯的数学分析工具、为将来学习专业课提供工具上的支撑。学生的Matlab学习策略应该是在Matlab课程中入门之后,在后续的专业课中通过对专业理论知识的仿真,理解专业课的基本概念,同时深化编程技能,仿真过程中会用到新的指令,在专业课中现学现用。
2.3 项目教学法有助于提高学生独立编程能力
项目教学法是以建构主义学习理论为基础,通过完成项目任务,在解决问题的过程中进行深度学习的教学策略。它能提高课程的趣味性,激发学生的求知欲,让学生能够自主参与进来,主动投身到项目任务当中,进行探索性、研究性学习。而且通过做项目,开阔学生视野,激发学生想象力,提高学生的自学能力、观察能力、分析和解决问题的能力、信息搜集能力等等[7-8]。在课程中应用项目教学法时,项目的选定很重要,项目要有趣味性、应用性和挑战性,且难易度适中;在项目教学实施过程中教师的指导也非常关键,老师要善于引导学生进行独立思考,让学生积极主动参与进来,要让学生领会编程思路、掌握调试技能,并引导学生对实验数据进行分析和讨论、对程序进行理论验证。从项目开发实战中获取编程经验、提高独立编程能力,这是项目教学法相对于实例教学法和任务教学法所无法比拟的优势。
3基于项目教学法的学生独立编程能力提高
3.1基于项目教学法的Matlab教学内容改革
我校Matlab课程安排在大二第一学期,总共讲授32学时,学生已学习的内容包括高等数学、线性代数、C语言等学科基础课程,并与电路等专业基础课同期授课。授课地点安排为机房,学生学习指令之后直接上机做实验,以便快速理解和掌握基本指令的使用方法,做项目时学生在课堂内完善和改进教师提供的样例程序,在教师的提示下进行程序调试,对实验数据进行分析和讨论,引导学生进行深度学习。
为没有专业知识背景的低年级学生找难易度适中且具有一定实际意义的应用性项目并不容易。做书上的例题和习题不能称之为项目教学;安排难度稍高的任务、鼓励和帮助学生独立完成任务的任务驱动教学法[5],在提高学生自习能力和编程能力上有一定意义,但是缺少应用性和趣味性,对学生的吸引力较小,不能引发学生深入而发散的思考,与项目教学有区别。一些学校开设验证性[+]综合性[+]设计性Matlab实验[6],这也不是真正意义上的项目教学。本文选定的项目以高中三角函数为起点,逐步拔高知识层次,快速入门之后即刻开展项目做深度学习。项目贯穿教学全过程,在解决项目任务的过程中理解、掌握和综合应用Matlab基本指令,用项目任务刺激学生求知欲,使学生思维活跃起来,触类旁通。
本文将Matlab所囊括的基本知识点分为三大入门模块,教学安排如表1所示,每一个模块讲授完之后,综合这些知识点进行项目实践。实践项目时先提供样例程序供学生模仿,通过样例程序的引导使学生迅速进入项目的问题情境。在此基础上扩展项目任务,指导学生对程序进行改进,将模仿(验证)、综合和设计三部曲融合到每个项目中。开展项目教学过程中不可避免地碰到没学过的指令和显浅的专业知识,教学中广泛采用现学现用策略,如果涉及较深的专业知识做屏蔽处理,由老师编写子程序供学生调用。
3.2程序调试是必须掌握的技能
再熟练的编程人员也不可能一次性编写出没有语法错误、没有逻辑错误的完整的程序。一个对策是每写完一小段程序,即刻运行,确认无误之后再进行下一段程序编写;另一个对策是进行单步调试,单步调试在编程实战中也是经常使用的操作,但是学生喜欢痛快的,程序编写完之后按F5全速运行得到最终运行结果。教学过程中要求学生熟练运用这两种编程策略,同时密切关注工作区和命令窗的变化,观察程序计算结果是否与编程意图一模一样、有没有出现没考虑到的意外情况。
学生编写的程序中经常出现的语法错误有中文标点符号、变量名大小写错误、变量没有定义而引用、向量或矩阵的索引号超出范围等。教师给样例程序的时候故意设置这些陷阱,让学生仔细阅读命令窗的错误提示,自行改正语法错误。经常出现的错误还有逻辑错误,指导学生在单步调试过程中一方面察看程序运行步骤,另一方面仅仅盯着工作区中变量的数值变化,认真进行数据分析和确认。学生通过这些训练,逐步增长调试经验,提高程序调试技能。
3.3注重实验数据的分析、讨论和理论验证
用理论验证程序是非常重要的,程序是将数学语言翻译为计算机语言,程序只要没有语法错误,肯定能得到一个计算结果,至于这个结果对不对、有没有道理,只能由人來判断,用理论来验证。
入门1中学生学习Matlab基本运算和简单的plot指令之后,让学生分析函数:
[[y=lgx2-10x+25] (1) ]
的特性。学生独立编写程序,画出函数曲线如图2,得出该函数有对称性、存在最小值的结论。
[x = 0:0.01:10;
y = log10(x.^2-10*x+25);
plot(x,y); ]
教师引导学生进行理论分析:
[[lgx2-10x+25=lgx-52=2lgx-5] (2) ]
该函数以直线[x=5]为对称轴左右对称,[x]从左、从右趋于[5]时[y]均趋于[-∞],该函数不应该出现最小值,理论分析和Matlab画图有矛盾。教师给出结论:“Matlab欺骗了我们”。教师引导学生横向放大[x=5]的周围,曲线如图3所示,学生才发现不是Matlab说谎了,是自己做错了,[x=5]的位置函数曲线是间断的,Matlab只计算了[x=4.99]和[x=5.01]两个点。进一步分析工作区中变量[y]的数值,[x501=5],对应的[y501=-Inf],图2看着似乎有最小值,其实它不是最小值,而是间断点。学生深切体会理论验证程序的必要性。
学生不知道哪些东西需要做理论分析和讨论,也不知道怎样进行分析和讨论,这就需要老师循循善诱。比如项目1中用plot指令画音乐信号波形之后弹出来的图形窗口一片蓝色,什么信息都得不到,教学生图形窗口的操作方法:zoom,pan,cursor,将音乐中do音的信号波形横向放大之后才看到正弦波,引导学生测量正弦波周期为0.0038s,计算倒数得到频率262Hz,确认生成信号与理论相符。讲到这里,有些学生自行摸索rotate,brush,dock figure等更多功能。项目3的频域分析中,用cursor检验两个正弦分量的频率数值,确认DTMF编码子程序的正确性,再进行下一步DTMF解码子程序。学生虽然没有接触过频域分析的概念,但是从高中三角函数引入频率的概念还是很容易的,至于傅里叶变换子程序由教师编写供学生使用,学生只要理解频率的概念、会调用子程序即可进行独立编程,完成项目任务。
教师时时提醒学生,没有经过分析、讨论和理论验证的程序是半成品,是不可信的,程序一定要通过理论验证环节。这一点也是本文反对在Matlab课程中做一些涉及较深专业知识的实验项目的原因,没有深厚的专业知识底蕴,即使正确使用Matlab指令编写出程序也没有任何意义,因为编写的程序无从判断其正确性,也无法对计算结果进行分析和讨论并给出合理的理论解释。专业课实验交给专业课老师指导,对理论知识理解透彻的前提下,Matlab编程才有意义。
此外,相关资料搜集技能、报告书写作技能、发表技能、阅读论文等技能都是需要的。Matlab教学中,每次做完一个项目都要求学生写报告书,报告书采用论文结构,给学生做简单的论文指导。因为还没有学习专业课,讓学生读论文难度比较高,找一些难度低的学术文章也不容易,可以考虑在网上搜索几篇写得好的与项目相关的文章推荐给学生读。学生在解决项目任务的过程中碰到了适当的困难和挫折,克服困难,积极探索,最终品尝到成功的喜悦,继而增强了求知欲,开拓了视野,提高了分析问题和解决问题的能力。
4结论
高等教育的教学理念正在从“期待学生知道的量”到“期待学生用其所学”转变,“高等教育不是给学生解决问题,而是让学生想更多的问题”。本着这一教学理念,本文以快速入门、项目贯穿教学全过程的方式展开Matlab项目教学,每一个项目均融入验证性、综合性、设计性,让学生想象力飞起来,让学生主动投身到项目任务的探索和研究中,达到深度学习的目的。在项目教学实施过程中注重培养学生帮助文档阅读技能、程序调试技能、计算结果的分析和讨论技能以及用理论验证程序的良好思维习惯,以实现学生能够达到初步的独立编程能力这一教学目标。
参考文献:
[1] 张静亚.基于项目驱动的Matlab教学方法研究[J]科技资讯, 2014(36): 147-149.
[2] 易昆南, 李慧, 赵澍源.让枯燥无味的数学变得有趣、有味、有惑——Matlab中的音乐合成[J].实验室研究与探索, 2014, 33(6): 114-117.
[3] 魏为民, 屈婉莹, 赵琰.Matlab程序设计语言快速教学实践[J].计算机教育, 2015(24):102-106.
[4] 毕美华, 杨国伟, 周雪芳, 曾然, 胡淼, 李齐良.Matlab寓教于乐教学模式的探讨[J].高教学刊, 2017(11): 86–87.
[5] 林海涛, 任务驱动教学法在《Matlab程序设计语言》教学中的实践[J].开封教育学院学报, 2014, 34(1): 80–81.
[6] 张玉叶.Matlab语言课程教学中若干问题探讨[J].实验室研究与探索, 2018, 37(3): 176–179
[7] 姜静思.浅析项目式教学[J].电脑知识与技术,2014,10(5):1006-1007.
[8] 曹倩雯,吕光金.游戏项目在“VB程序设计”课程中的应用[J].电脑知识与技术,2015,11(21):85-87.
【通联编辑:王力】