摘 要:現代教育技術環境,特別是網絡環境,對大學數學教學、學習帶來了巨大變革。教學過程中充分應用現代教育媒體,精心制作多媒體課件,優化課堂教學,開設數學實驗和數學建模,是提高數學教學質量的有效方法。探討了利用MATLAB如何實現數學實驗教學,并詳細給出了幾個利用MATLAB的GUI設計和編程進行數學實驗教學的教學案例。
關鍵詞:大學數學;實驗教學;MATLAB
中圖分類號:G64文獻標識碼:A文章編號:1672-3198(2008)08-0273-02
1 MATLAB與其功能
MATLAB軟件是由美國Math works公司推出的用于數值計算和圖形處理的科學計算系統環境。MATLAB是一種以數值計算和數據圖示為主的計算機軟件,并包含適應多個學科的專業軟件包,以及完善程序開發功能。
MATLAB有五大功能:(1)數值計算功能:包括矩陣的創建和保存;數值矩陣代數、乘方運算和分解;數組運算;多項式和有理分式運算;數據統計分析等;(2)符號計算功能:可以計算符號解和任何精度數值解;(3)圖形和可視化功能:能構造二維、三維曲線;三維曲面;圖形的標識;坐標控制;圖形的疊繪;視角和光照設計;動態軌跡和影片動畫等;(4)活筆記本功能:在Notebook環境中,用戶不僅擁有Word的全部文字處理能力,而且可獲得MATLAB所賦予的各種數組計算、符號計算和計算結果的可視化能力;(5)可視化建模和仿真功能:利用MATLAB可以進行數學和計算;算術發展模型、模擬和原型;數據分析、開發、和可視化;科學和工程圖學;應用發展包括圖形用戶界面設計等。
2 在大學數學實驗教學中應用MATLAB的必要性與可行性
數學實驗包括兩部分主要內容,第一部分是基礎部分,圍繞大學數學的基本內容,讓學生充分利用計算機及軟件的數值功能和圖形功能展示基本概念與結論,去體驗如何發現、總結和應用數學規律。另一部分是高級部分,以大學數學為中心向邊緣學科發散,可以涉及到微分幾何、數值方法、數理統計、圖論與組合、微分方程、運籌與優化等,也可以涉及到現代新興的學科和方向,如分形、混沌等。這部分的內容可以是新的,但不必強調完整性,教師介紹一點主要的思想,提出問題和任務,讓學生嘗試通過自己動手和觀察實驗結果去發現和總結其中的規律,即使總結不出來也沒有關系,留待將來再學,有興趣的可以自己去找參考書尋找答案。
本文筆者利用MATLAB的強大的可視化功能、數值計算功能和符號運算功能,開發出友好的圖形用戶界面,介紹四個基礎部分的實驗案例,從不同的側面說明數學實驗的設計目的、實驗步驟、實驗練習等內容,使學生不需要MATLAB的知識就能方便操作和應用。且具有以下兩個特點:
(1)交互性強:圖形用戶界面的大部分函數可以任意輸入,大部分參數可以修改;
(2)圖形準確、表現力強:該系統的圖形均通過編程來完成繪制。
3 基于MATLAB的大學數學實驗教學案例
3.1 實驗一:數列極限
(1)實驗目的。
在學習數列極限時,數列極限的概念是比較難理解的。通過Logistic模型的實驗,使學生更好地理解數列極限的概念。同時,如果學生有了一定的MATLAB知識,可以熟悉MATLAB軟件中關于圖形的基本命令,掌握利用MATLAB軟件進行函數圖形繪制的方法。
(2)實驗步驟。
Logistic模型為Pn=kPn(1一Pn),在參數k和初值P。為何值時,數列收斂,為何值時數列發散。學生可以在界面上親自操作,得出不同的數列曲線,觀察出相應的結果。
(3)實驗練習。
繪制下列圖像:
k=1.5,p0=0.5
k=2.1,p0=0.5
k=2.7,p0=0.5
k=3.1,p0=0.5
通過實驗和觀察,發現和驗證一些Logistic模型數列的極限規律。
(4)MATLAB軟件實現。
3.2 實驗二:曲線擬合
(1)實驗目的。
對于某個變化過程中的多個相互依賴的變量,可建立適當的數學模型,用于分析預報決策或控制該過程。對于兩個變量可通過用一個一元函數去模擬這兩個變量的取值,用不同的方法可得到不同的模擬函數。下面學習了解一些擬合方法,用基本函數曲線及其變換模擬給定的曲線,掌握如何用MATLAB做出曲線擬合。熟悉MATLAB軟件中關于曲線擬合的一些基本命令,掌握利用MATLAB軟件進行曲線擬合的方法。
(2)實驗步驟
學生可以在界面上“數據x”和“數據y”的編輯框處輸入相應的實驗數據。
(注意:按矩陣形式輸入,數字之間加空格),點擊按鈕“繪圖”,即可在圖形窗口看到線性擬合的曲線折線圖;點擊按鈕“線性擬合”,即可在圖形窗口看到線性擬合的曲線,同時在下面的擬合方程處看到“擬合曲線方程”和“度量誤差”;點擊按鈕“三次擬合”,即可在圖形窗口看到三次擬合的曲線;點擊按鈕“指數擬合”,即可在圖形窗口看到指數擬合的曲線。通過比較誤差度量的離差平方和的大小,確定最好的擬合方式。
(3)MATLAB軟件實現
按鈕“繪圖”的回調程序為:
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
按鈕“線性擬合”的回調程序為:
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)
按鈕“三次擬合”的回調程序為:
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)
按鈕“指數擬合”的回調程序為:
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';
A=X/Y。