案例教学法在MATLAB语言课程中的应用探讨
2019-09-17陈旭
陈旭
【摘 要】针对MATLAB语言课程对抽象思维要求高的特点,将案例教学法引入到MATLAB课程教学中。以微分方程数值求解为例,介绍了案例背景、算法原理、编程语言以及结果分析等方面,向学生展示了MATLAB语言在实际科学问题求解中的应用,加深了学生对课堂知识的理解,培养了学习兴趣,提升了教学效果。
【关键词】MATLAB;计算机仿真;案例教学法微分方程
【中图分类号】G642 【文献标识码】A
【文章编号】2095-3089(2019)16-0009-01
引言
MATLAB是由美国Mathworks公司于1984年推出的一门高级计算机语言,具有功能强、效率高、易学习等特点,涵盖了线性代数、数值分析、数据统计、优化设计以及控制系统仿真等领域,成为电气与自动化专业学生重点学习与使用的一门计算机语言。MATLAB课程具有很强的实践性,有利于培养学生动手能力[1]。当前,影响MATLAB语言课程教学效果主要在以下方面。首先,MATLAB程序语法多,课堂信息大,教师在讲授编程语法时,由于课堂时间的限制,只能对部分知识点进行演示。其次,课程具有很强的逻辑性,对抽象思维能力要求较高,学生如果不适应计算机编程语言的思维方式,容易丧失学习兴趣,影响学习效果。
因此,如何设计MATLAB语言的教学方案,提高学生的学习兴趣,增强教学效果,是授课教师关心的重点问题。笔者最近几年一直从事自动化专业MATLAB语言的教学工作,通过引入案例教学方法,培养学生独立思考與解决实际问题的能力,激发了学生的学习兴趣,获得了良好的教学效果。
一、案例教学法
案例式教学法是指在教师指导下通过学生对案例的思考、分析和辩论,就问题作出判断和决策,从而提高学生思考、分析和解决问题能力的一种教学方法[2]。
笔者将案例式教学引入到MATLAB课堂教学中,对每一章节重点知识点,选择有代表性、实用性、趣味性的设计案例,将程序设计过程呈现在大屏幕上,让学生感受参与其中,提高学生学习程序设计的兴趣,大大激发了学生的求知欲。下面以求解常微分方程组的案例,展示案例法在MATLAB课程教学中的应用。
二、案例教学法在MATLAB课程中的应用
常微分方程求解是科学计算与工程应用中经常遇到的一类问题,一般不存在解析解,需要采用数值方法求取数值解[4]。本文以常微分方程数值求解为案例,介绍案例教学法在实际课堂教学中的应用。
首先,向学生介绍常微分方程的基本知识。一般的m阶微分方程可以表示为:
〖JB({〗y(m)=f(x,y,y′,L,y(m-1))
y(x0)=y0,y′(x0)=y1,L,y(m-1)(x0)=ym-1〖JB)〗(1)
高阶微分方程无法采用MATLAB直接求解,必须引入新变量y1=y,y2=y′,L,ym=ym-1将其化解为一阶微分方程组:
〖JB({〗y′1=y2
y′2=y3
L
y′m-1=f(x,y,y2,L,ym)
y1(x0)=y0,y2(x0)=y1,L,ym(x0)=ym-1〖JB)〗(2)
紧接着向学生讲解使用MATLAB求解常微分方程的具体步骤:
步骤1:列出常微分方程表达式及其初始条件;如果是高阶常微分方程,通过变量替换,将其转化为一阶微分方程组;
步骤2:编写描述一阶微分方程组的M函数文件;
步骤3:利用MATLAB提供的solver()函数求解微分方程。
Matlab中求微分方程数值解solver()函数有七个:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb,其中最常用的是ode45,表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长的常微分方程数值解法。具体条用格式如下:
[T,Y]=solver(‘fun,tsoan,y0),‘fun为一阶微分方程组对应M文件名;tspan为时间矢量;y0为微分方程的初值。
1.编程和调试。
在课堂教学中,结合实例,现场一行一行的进行MATLAB代码讲解。实现过程中可对MATLAB语言函数命令、调用方法等进行介绍。同时需注意学生听讲情况,引领学生进入案例情景,理解程序实现流程,掌握实际问题求解步骤。
【案例1】采用ode45求解以下微分方程组在[0,12]上的解:
〖JB({〗y′1=y2y3y′2=-y2y3y′3=-0.51y1y2y1(0),y2(0)=1,y3(0)=1〖JB)〗(3)
首先,编写函数文件funf.m,描述常微分方程组。
function dy=funf(t,y)
dy=zeros(3,1);
dy(1)=y(2)*y(3);
dy(2)=-y(1)*y(3);
dy(3)=-0.51*y(1)*y(2);
然后,编写主函数main.m,调用ode45函数进行问题求解:
clc;
clear;
tspan=[0,12];
options=odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5])
y0=[0;1;1];
[T,Y]=ode45('funf',tspan,y0,options);