陳旭
【摘 要】針對(duì)MATLAB語言課程對(duì)抽象思維要求高的特點(diǎn),將案例教學(xué)法引入到MATLAB課程教學(xué)中。以微分方程數(shù)值求解為例,介紹了案例背景、算法原理、編程語言以及結(jié)果分析等方面,向?qū)W生展示了MATLAB語言在實(shí)際科學(xué)問題求解中的應(yīng)用,加深了學(xué)生對(duì)課堂知識(shí)的理解,培養(yǎng)了學(xué)習(xí)興趣,提升了教學(xué)效果。
【關(guān)鍵詞】MATLAB;計(jì)算機(jī)仿真;案例教學(xué)法微分方程
【中圖分類號(hào)】G642 ??????【文獻(xiàn)標(biāo)識(shí)碼】A
【文章編號(hào)】2095-3089(2019)16-0009-01
引言
MATLAB是由美國Mathworks公司于1984年推出的一門高級(jí)計(jì)算機(jī)語言,具有功能強(qiáng)、效率高、易學(xué)習(xí)等特點(diǎn),涵蓋了線性代數(shù)、數(shù)值分析、數(shù)據(jù)統(tǒng)計(jì)、優(yōu)化設(shè)計(jì)以及控制系統(tǒng)仿真等領(lǐng)域,成為電氣與自動(dòng)化專業(yè)學(xué)生重點(diǎn)學(xué)習(xí)與使用的一門計(jì)算機(jī)語言。MATLAB課程具有很強(qiáng)的實(shí)踐性,有利于培養(yǎng)學(xué)生動(dòng)手能力[1]。當(dāng)前,影響MATLAB語言課程教學(xué)效果主要在以下方面。首先,MATLAB程序語法多,課堂信息大,教師在講授編程語法時(shí),由于課堂時(shí)間的限制,只能對(duì)部分知識(shí)點(diǎn)進(jìn)行演示。其次,課程具有很強(qiáng)的邏輯性,對(duì)抽象思維能力要求較高,學(xué)生如果不適應(yīng)計(jì)算機(jī)編程語言的思維方式,容易喪失學(xué)習(xí)興趣,影響學(xué)習(xí)效果。
因此,如何設(shè)計(jì)MATLAB語言的教學(xué)方案,提高學(xué)生的學(xué)習(xí)興趣,增強(qiáng)教學(xué)效果,是授課教師關(guān)心的重點(diǎn)問題。筆者最近幾年一直從事自動(dòng)化專業(yè)MATLAB語言的教學(xué)工作,通過引入案例教學(xué)方法,培養(yǎng)學(xué)生獨(dú)立思考與解決實(shí)際問題的能力,激發(fā)了學(xué)生的學(xué)習(xí)興趣,獲得了良好的教學(xué)效果。
一、案例教學(xué)法
案例式教學(xué)法是指在教師指導(dǎo)下通過學(xué)生對(duì)案例的思考、分析和辯論,就問題作出判斷和決策,從而提高學(xué)生思考、分析和解決問題能力的一種教學(xué)方法[2]。
筆者將案例式教學(xué)引入到MATLAB課堂教學(xué)中,對(duì)每一章節(jié)重點(diǎn)知識(shí)點(diǎn),選擇有代表性、實(shí)用性、趣味性的設(shè)計(jì)案例,將程序設(shè)計(jì)過程呈現(xiàn)在大屏幕上,讓學(xué)生感受參與其中,提高學(xué)生學(xué)習(xí)程序設(shè)計(jì)的興趣,大大激發(fā)了學(xué)生的求知欲。下面以求解常微分方程組的案例,展示案例法在MATLAB課程教學(xué)中的應(yīng)用。
二、案例教學(xué)法在MATLAB課程中的應(yīng)用
常微分方程求解是科學(xué)計(jì)算與工程應(yīng)用中經(jīng)常遇到的一類問題,一般不存在解析解,需要采用數(shù)值方法求取數(shù)值解[4]。本文以常微分方程數(shù)值求解為案例,介紹案例教學(xué)法在實(shí)際課堂教學(xué)中的應(yīng)用。
首先,向?qū)W生介紹常微分方程的基本知識(shí)。一般的m階微分方程可以表示為:
〖JB({〗y(tǒng)(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(tǒng)′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)
緊接著向?qū)W生講解使用MATLAB求解常微分方程的具體步驟:
步驟1:列出常微分方程表達(dá)式及其初始條件;如果是高階常微分方程,通過變量替換,將其轉(zhuǎn)化為一階微分方程組;
步驟2:編寫描述一階微分方程組的M函數(shù)文件;
步驟3:利用MATLAB提供的solver()函數(shù)求解微分方程。
Matlab中求微分方程數(shù)值解solver()函數(shù)有七個(gè):ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb,其中最常用的是ode45,表示采用四階-五階Runge-Kutta算法,它用4階方法提供候選解,5階方法控制誤差,是一種自適應(yīng)步長的常微分方程數(shù)值解法。具體條用格式如下:
[T,Y]=solver(‘fun,tsoan,y0),‘fun為一階微分方程組對(duì)應(yīng)M文件名;tspan為時(shí)間矢量;y0為微分方程的初值。
1.編程和調(diào)試。
在課堂教學(xué)中,結(jié)合實(shí)例,現(xiàn)場(chǎng)一行一行的進(jìn)行MATLAB代碼講解。實(shí)現(xiàn)過程中可對(duì)MATLAB語言函數(shù)命令、調(diào)用方法等進(jìn)行介紹。同時(shí)需注意學(xué)生聽講情況,引領(lǐng)學(xué)生進(jìn)入案例情景,理解程序?qū)崿F(xiàn)流程,掌握實(shí)際問題求解步驟。
【案例1】采用ode45求解以下微分方程組在[0,12]上的解:
〖JB({〗y(tǒng)′1=y2y3y′2=-y2y3y′3=-0.51y1y2y1(0),y2(0)=1,y3(0)=1〖JB)〗(3)
首先,編寫函數(shù)文件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);
然后,編寫主函數(shù)main.m,調(diào)用ode45函數(shù)進(jìn)行問題求解:
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);