摘 要:現(xiàn)代教育技術(shù)環(huán)境,特別是網(wǎng)絡(luò)環(huán)境,對(duì)大學(xué)數(shù)學(xué)教學(xué)、學(xué)習(xí)帶來(lái)了巨大變革。教學(xué)過(guò)程中充分應(yīng)用現(xiàn)代教育媒體,精心制作多媒體課件,優(yōu)化課堂教學(xué),開(kāi)設(shè)數(shù)學(xué)實(shí)驗(yàn)和數(shù)學(xué)建模,是提高數(shù)學(xué)教學(xué)質(zhì)量的有效方法。探討了利用MATLAB如何實(shí)現(xiàn)數(shù)學(xué)實(shí)驗(yàn)教學(xué),并詳細(xì)給出了幾個(gè)利用MATLAB的GUI設(shè)計(jì)和編程進(jìn)行數(shù)學(xué)實(shí)驗(yàn)教學(xué)的教學(xué)案例。
關(guān)鍵詞:大學(xué)數(shù)學(xué);實(shí)驗(yàn)教學(xué);MATLAB
中圖分類號(hào):G64文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-3198(2008)08-0273-02
1 MATLAB與其功能
MATLAB軟件是由美國(guó)Math works公司推出的用于數(shù)值計(jì)算和圖形處理的科學(xué)計(jì)算系統(tǒng)環(huán)境。MATLAB是一種以數(shù)值計(jì)算和數(shù)據(jù)圖示為主的計(jì)算機(jī)軟件,并包含適應(yīng)多個(gè)學(xué)科的專業(yè)軟件包,以及完善程序開(kāi)發(fā)功能。
MATLAB有五大功能:(1)數(shù)值計(jì)算功能:包括矩陣的創(chuàng)建和保存;數(shù)值矩陣代數(shù)、乘方運(yùn)算和分解;數(shù)組運(yùn)算;多項(xiàng)式和有理分式運(yùn)算;數(shù)據(jù)統(tǒng)計(jì)分析等;(2)符號(hào)計(jì)算功能:可以計(jì)算符號(hào)解和任何精度數(shù)值解;(3)圖形和可視化功能:能構(gòu)造二維、三維曲線;三維曲面;圖形的標(biāo)識(shí);坐標(biāo)控制;圖形的疊繪;視角和光照設(shè)計(jì);動(dòng)態(tài)軌跡和影片動(dòng)畫(huà)等;(4)活筆記本功能:在Notebook環(huán)境中,用戶不僅擁有Word的全部文字處理能力,而且可獲得MATLAB所賦予的各種數(shù)組計(jì)算、符號(hào)計(jì)算和計(jì)算結(jié)果的可視化能力;(5)可視化建模和仿真功能:利用MATLAB可以進(jìn)行數(shù)學(xué)和計(jì)算;算術(shù)發(fā)展模型、模擬和原型;數(shù)據(jù)分析、開(kāi)發(fā)、和可視化;科學(xué)和工程圖學(xué);應(yīng)用發(fā)展包括圖形用戶界面設(shè)計(jì)等。
2 在大學(xué)數(shù)學(xué)實(shí)驗(yàn)教學(xué)中應(yīng)用MATLAB的必要性與可行性
數(shù)學(xué)實(shí)驗(yàn)包括兩部分主要內(nèi)容,第一部分是基礎(chǔ)部分,圍繞大學(xué)數(shù)學(xué)的基本內(nèi)容,讓學(xué)生充分利用計(jì)算機(jī)及軟件的數(shù)值功能和圖形功能展示基本概念與結(jié)論,去體驗(yàn)如何發(fā)現(xiàn)、總結(jié)和應(yīng)用數(shù)學(xué)規(guī)律。另一部分是高級(jí)部分,以大學(xué)數(shù)學(xué)為中心向邊緣學(xué)科發(fā)散,可以涉及到微分幾何、數(shù)值方法、數(shù)理統(tǒng)計(jì)、圖論與組合、微分方程、運(yùn)籌與優(yōu)化等,也可以涉及到現(xiàn)代新興的學(xué)科和方向,如分形、混沌等。這部分的內(nèi)容可以是新的,但不必強(qiáng)調(diào)完整性,教師介紹一點(diǎn)主要的思想,提出問(wèn)題和任務(wù),讓學(xué)生嘗試通過(guò)自己動(dòng)手和觀察實(shí)驗(yàn)結(jié)果去發(fā)現(xiàn)和總結(jié)其中的規(guī)律,即使總結(jié)不出來(lái)也沒(méi)有關(guān)系,留待將來(lái)再學(xué),有興趣的可以自己去找參考書(shū)尋找答案。
本文筆者利用MATLAB的強(qiáng)大的可視化功能、數(shù)值計(jì)算功能和符號(hào)運(yùn)算功能,開(kāi)發(fā)出友好的圖形用戶界面,介紹四個(gè)基礎(chǔ)部分的實(shí)驗(yàn)案例,從不同的側(cè)面說(shuō)明數(shù)學(xué)實(shí)驗(yàn)的設(shè)計(jì)目的、實(shí)驗(yàn)步驟、實(shí)驗(yàn)練習(xí)等內(nèi)容,使學(xué)生不需要MATLAB的知識(shí)就能方便操作和應(yīng)用。且具有以下兩個(gè)特點(diǎn):
(1)交互性強(qiáng):圖形用戶界面的大部分函數(shù)可以任意輸入,大部分參數(shù)可以修改;
(2)圖形準(zhǔn)確、表現(xiàn)力強(qiáng):該系統(tǒng)的圖形均通過(guò)編程來(lái)完成繪制。
3 基于MATLAB的大學(xué)數(shù)學(xué)實(shí)驗(yàn)教學(xué)案例
3.1 實(shí)驗(yàn)一:數(shù)列極限
(1)實(shí)驗(yàn)?zāi)康摹*?/p>
在學(xué)習(xí)數(shù)列極限時(shí),數(shù)列極限的概念是比較難理解的。通過(guò)Logistic模型的實(shí)驗(yàn),使學(xué)生更好地理解數(shù)列極限的概念。同時(shí),如果學(xué)生有了一定的MATLAB知識(shí),可以熟悉MATLAB軟件中關(guān)于圖形的基本命令,掌握利用MATLAB軟件進(jìn)行函數(shù)圖形繪制的方法。
(2)實(shí)驗(yàn)步驟。
Logistic模型為Pn=kPn(1一Pn),在參數(shù)k和初值P。為何值時(shí),數(shù)列收斂,為何值時(shí)數(shù)列發(fā)散。學(xué)生可以在界面上親自操作,得出不同的數(shù)列曲線,觀察出相應(yīng)的結(jié)果。
(3)實(shí)驗(yàn)練習(xí)。
繪制下列圖像:
k=1.5,p0=0.5
k=2.1,p0=0.5
k=2.7,p0=0.5
k=3.1,p0=0.5
通過(guò)實(shí)驗(yàn)和觀察,發(fā)現(xiàn)和驗(yàn)證一些Logistic模型數(shù)列的極限規(guī)律。
(4)MATLAB軟件實(shí)現(xiàn)。
3.2 實(shí)驗(yàn)二:曲線擬合
(1)實(shí)驗(yàn)?zāi)康摹*?/p>
對(duì)于某個(gè)變化過(guò)程中的多個(gè)相互依賴的變量,可建立適當(dāng)?shù)臄?shù)學(xué)模型,用于分析預(yù)報(bào)決策或控制該過(guò)程。對(duì)于兩個(gè)變量可通過(guò)用一個(gè)一元函數(shù)去模擬這兩個(gè)變量的取值,用不同的方法可得到不同的模擬函數(shù)。下面學(xué)習(xí)了解一些擬合方法,用基本函數(shù)曲線及其變換模擬給定的曲線,掌握如何用MATLAB做出曲線擬合。熟悉MATLAB軟件中關(guān)于曲線擬合的一些基本命令,掌握利用MATLAB軟件進(jìn)行曲線擬合的方法。
(2)實(shí)驗(yàn)步驟
學(xué)生可以在界面上“數(shù)據(jù)x”和“數(shù)據(jù)y”的編輯框處輸入相應(yīng)的實(shí)驗(yàn)數(shù)據(jù)。
(注意:按矩陣形式輸入,數(shù)字之間加空格),點(diǎn)擊按鈕“繪圖”,即可在圖形窗口看到線性擬合的曲線折線圖;點(diǎn)擊按鈕“線性擬合”,即可在圖形窗口看到線性擬合的曲線,同時(shí)在下面的擬合方程處看到“擬合曲線方程”和“度量誤差”;點(diǎn)擊按鈕“三次擬合”,即可在圖形窗口看到三次擬合的曲線;點(diǎn)擊按鈕“指數(shù)擬合”,即可在圖形窗口看到指數(shù)擬合的曲線。通過(guò)比較誤差度量的離差平方和的大小,確定最好的擬合方式。
(3)MATLAB軟件實(shí)現(xiàn)
按鈕“繪圖”的回調(diào)程序?yàn)椋邯?/p>
cla
h1=get(handles. edit1,'string')
h2=get(handles. edit2,'string')
x0=eval(str2mat(h 1))
y0=eval(str2mat(h2))
axes(handles. axesl )
m=plot(x0,y0)
k=get(handles. popul,'value');
switch k
case 1
set(m,'color','r')
case 2
set(m,'color','m')
case 3
set(m,'color','c')
case 4
set(m,'color','g')
end
按鈕“線性擬合”的回調(diào)程序?yàn)椋邯?/p>
dy=0.15
h1=get(handles. edit 1,'string')
h2=get(handles.edit2,'string')
x0=eval(str2mat(h1))
y0=eval(str2mat(h2))
axes(handles.axes1)
[p,S]=polyfit(x0,y0,1)
z=polyval(f,x0)
aa=z-y0
plot(x0,y0,'o',x0,z,'r')
hold on
set(handles.edit6,'string',aa)
p2st=poly2str(p,'x')
set(handles.edit3,'string',p2st)
按鈕“三次擬合”的回調(diào)程序?yàn)椋邯?/p>
hl=get(handles.editl,'string')
h2=get(handles.edit2,'string')
x0=eval(str2mat(hl))
y0=eval(str2mat(h2))
axes(handles.axesl)
p=polyfit(x0,y0,3)
z=polyval(p,x0)
aa=z-y0
set(handles.edit7,'string',aa)
plot(x0,y0,'o')
hold on
p2st=poly2str(p'x')
syms x
f=p(1)*x^3+p(2)*x^2+p(3)*x+p(4);
set(handles.edit4,'string',p2st)
ezplot(f)
按鈕“指數(shù)擬合”的回調(diào)程序?yàn)椋邯?/p>
hl=get(handles.editl,'string')
h2=get(handles.edit2,'string')
x0=eval(str2mat(h 1))
y0=eval(str2mat(h2))
axes(handles.axesl) y=log(y0);A=nihe(x0,y,1)
a=exp(A(1))
b=A(2)
a=double(A(1))
b=double(A(2))
syms x
f=a*exp(b*x)
ezplot(f)
v=char(f)
hold on
set(handles.edit5,'string',v)
z=a*exp(b*x0)-y0
set(handles.edit8,'string',z)
function A=nihe(x,y,n)
m=length(x);
X1=zeros(1,2*n);
for i=1:2*n
X1(i)=sum(x.^i);end
X2=[m,Xl (l :n)];X3=zeros(n,n+1);
for j=l :n
X3 (j,:)=X 1(j:j+n);end
X=[X2;X3];Y=zeros(l,n);
for k=l :n
Y(k)=sum(x.^k.*y);end
Y=[S,(y),Yl ]Y=Y(jié)';
A=X/Y。