王祝園,王 娟
(安徽三聯學院 基礎部,合肥 230601)
高等數學是高等院校眾多專業(yè)必修的一門基礎課程,是學生學習專業(yè)課的基礎。根據教育部在《數學類專業(yè)規(guī)范和教學基本要求》中提出 “在傳授知識的同時,要努力培養(yǎng)學生抽象思維和邏輯推理的理性思維能力,綜合運用所學的知識分析問題和解決問題的能力以及較強的自主學習能力,逐步培養(yǎng)學生的創(chuàng)新精神和創(chuàng)新能力”,建議“各校應根據自身的實際情況,努力創(chuàng)造條件,以適當的形式開設與理論教學相配套的數學建模和數學實驗課,或在現有的數學課程教學中適當安排數學建模和數學實驗的內容,培養(yǎng)學生建立數學模型并借助于數學軟件解決經濟和管理問題的能力”。隨著計算機多媒體的迅速發(fā)展和普及,高等數學除了要求學生掌握好其基本的理論知識,其廣泛的應用性對學生的計算能力也提出了更高的要求。數學理論知識為主,計算機軟件為輔的教學方式已經成為一種發(fā)展趨勢[1]。目前許多高等院校引入了數學軟件用于高等數學的輔助教學[2-5],運用數學軟件強大的計算功能來可視化高等數學的復雜性與抽象性,有利于提高同學們的學習興趣,增強高等數學課程的教學效果[6],培養(yǎng)學生應用數學軟件解決實際問題的能力。
Matlab是由MathWorks公司于1984年推出的數值計算型的數學類科技應用軟件。它集數值分析、矩陣運算、程序設計、符號計算及圖形顯示于一體,該軟件具有簡單易學、功能強大、使用方便、編程高效、界面友好等特點。將Matlab軟件應用于高等數學的教學中[7-10],可以更好地做到:
(1)Matlab的繪圖功能,可以將理論教學、實驗演示于一體,使一些抽象的概念能用可視化的圖形表示,達到傳統(tǒng)教學無法實現的效果,更好地激發(fā)學生學習的興趣。
(2)Matlab強大的符號計算和數值計算功能,可以簡化高等數學中繁雜的求導求積的推導過程,可以快速地算出結果。對于高等數學中的疑難問題,也可以用數值計算來得到結果。
(3)Matlab中有豐富的數據庫和工具箱,將Matlab用于數學建模,可以極大地縮短計算過程,節(jié)省時間,有利于數學建模的模型檢驗和修改。
例1 定積分概念
高等數學的教材中,定積分的概念定義非常抽象,由曲邊梯形面積經過分割,近似計算,求和,取極限引入定積分的概念,很多同學不好理解定積分只和被積函數和積分區(qū)間有關,和區(qū)間的分割方法和ξi的選取無關。借助Matlab軟件,用圖像來近似模擬,同學們會得到直觀的感受,更易理解定積分的概念的實質,取得較好的教學效果。
如計算y=x2在[0,1]上的面積。首先把閉區(qū)間[0,1]分割成n個小區(qū)間,分別用左邊端點的函數值為矩形高小區(qū)間長度為寬(左矩形),右邊端點的函數值為矩形高小區(qū)間長度為寬(右矩形),近似計算小曲邊梯形的面積,然后求n個小曲邊梯形的面積的和。
用Matlab軟件編輯被積函數intefun.m.
function f=intefun(x)f=x.^2;
分別編輯出如下leftsum.m,rightsum.m文件.
function I1=leftsum(intefun,a,b,n)
h=(b-a)/n;x=a+(0:n)*h;f1=feval(intefun,x);I1=0;
for i=1:n-1; I1=I1+f1(i)*h; end I1
h0=(b-a)/100;x0=a+(0:100)*h0;f0=feval(intefun,x0);
plot(x0,f0,'r');hold on
for i=1:n; plot([x(i),x(i)],[0,f1(i)],'g');end hold on
for i=1:n; plot([x(i),x(i+1)],[f1(i),f1(i)],'b');end
function I2=rightsum(intefun,a,b,n)
h=(b-a)/n;x=a+(0:n)*h;f1=feval(intefun,x);I2=0;
for i=1:n-1; I2=I2+f1(i+1)*h;end I2
h0=(b-a)/100;x0=a+(0:100)*h0;f0=feval(intefun,x0);
plot(x0,f0,'r');hold on
for i=1:n; plot([x(i),x(i)],[0,f1(i+1)],'g'); end hold on
for i=1:n; plot([x(i),x(i+1)],[f1(i+1),f1(i+1)],'b');end
在運行窗口輸入
subplot(1,2,1); leftsum('intefun',0,1,3);title('3等分左矩形圖')
subplot(1,2,2);rightsum('intefun',0,1,3);title('3等分右矩形圖')
計算結果為:I1=0.037,I2=0.185。畫出n=3分割的圖像,見圖1
同理計算出n=30的結果為:I1=0.286,I2=0.317。畫出分割的圖像,見圖2。
同理計算出n=300的結果為:I1=0.328,I2=0.332。畫出分割的圖像,見圖3。
圖3 300等分矩形圖
例2 極限概念
subplot(1,2,1); x=0.1:0.1:5;y1=sin(x)./x;plot(x,y1);hold on
x=-5:0.1:-0.1;y1=sin(x)./x;plot(x,y1, [0],[1],'*');hold on
title('重要極限1曲線圖')
subplot(1,2,2); n=1:1:200;y2=(1+1./n).^n;plot(n,y2);hold on
y3=ones(1,200).*2.718;plot(n,y3)title('重要極限2曲線圖')
畫出圖像見圖4,觀察變化趨勢,就能很好地理解極限的概念。
圖4 重要極限曲線圖
(1)在Matlab中輸入syms x yy=log(cot(x))/log(x);limit(y,x,0,'right')運行后得到結果為-1;
(2)在Matlab中輸入syms x y y=x^3*sin(2*x) dy2=diff(y,x,2)
運行后得到結果為6*x*sin(2*x)+12*x^2*cos(2*x)-4*x^3*sin(2*x);
(3)在Matlab中輸入syms x y y=x^15*(1+3*x^8)^1/2;int(y,x,0,1)。
數值積分,被積函數的原函數不能用初等函數表示,不能用牛頓-萊布尼茨公式計算的積分,運用Matlab中的quad函數計算積分。求常數項級數的和,很多常數項級數可以根據級數收斂的判定定理判斷出是收斂的,但是不易求級數的和,運用Matlab可以作出圖像,并用Maple工具箱中的sum函數求出收斂級數的和。
先建立mfun.m文件。function y=mfun(x) y=exp(-1.*x.^2);
在Matlab中輸入quad('mfun',0,1),運行結果為0.746 8.
先建立myfun.m文件。function y=myfun(n) y=0;for i=1:n; y=y+i*(i+1)/(2^i); i=i+1; plot(i,y,'rO'); hold on end
在Matlab中輸入myfun(50)得到圖像如圖5,從圖像可以直觀看出級數收斂于8。
圖5 級數收斂
在Matlab中輸入maple('sum(n*(n+1)/(2^n),n=1..infinity)') ,運行結果為8。
例6 某公司可通過電臺及報紙兩種方式做銷售某種商品的廣告。根據統(tǒng)計資料,銷售收入R(萬元)與電臺廣告費用x1(萬元)及報紙廣告費用x2(萬元)之間的關系有如下的經驗公式:
R=15+14x1+32x2-8x1x2-2x12-10x22,
(1)在廣告費用不限的情況下,求最優(yōu)廣告策略;
(2)若廣告費用為1.5萬元,求相應的最優(yōu)廣告策略。
解:(1)最優(yōu)廣告策略是使得利潤獲得最大值,構造利潤函數
y=15+13x1+31x2-8x1x2-2x12-10x22
先建立myfun1.m文件,function y=myfun1(x)
y=-(15+13*x(1)+31*x(2)-8*x(1)*x(2)-2*x(1)^2-10*x(2)^2);
在Matlab中輸入x0=[0,0];[x,fval]=fminunc(@myfun1,x0)
運行結果為:x =0.750 1.250 0 fval = -39.250 0
因此x1=0.75萬元,x2=1.25萬元時,獲利最大,最大值為39.25萬元。
(2)利潤函數y=15+13x1+31x2-8x1x2-2x12-10x22
約束條件x1+x2=1.5
在Matlab中輸入x0=[0,0];Aeq=[1,1];beq=[1.5];
[x,fval]=fmincon(@myfun1,x0,[ ],[ ],Aeq,beq)
運行結果為:x =-0.000 0 1.500 0 fval = -39.000 0
因此x1=0萬元,x2=1.5萬元時,獲利最大,最大值為39萬元。
例7 一男孩(兄)和一女孩(妹)分別在離家2公里和1公里且方向相反的兩所學校上學,每天同時放學后分別以4公里/小時和2公里/小時的速度步行回家。一小狗以6公里/小時的速度由男孩處奔向女孩,又由女孩處奔向男孩,如此往返直至回到家中,問小狗共奔跑了多少路程? 又如果男孩和女孩上學時,小狗也往返奔跑于他們之間,問當他們到達學校時小狗在何處?
對于問題1,由題設,男孩、女孩經半小時同時到家,小狗也不停地奔跑了半小時與他們同時到家。因此,小狗共跑了0.5×6=3公里。開始時無論小狗在男孩、女孩之間(即二學校之間)的任何位置,其最后結果都是經半小時后三者同時到家。
s=input('輸入s=');vb=4;vd=6;vg=2;ts=s/vb;t0=ts*3600
syms t;sb=2-s-vb*t;sd=2-vd*t;sg=2+s/2+vg*t;sbd='2-s-vb*t=2-vd*t';
t=solve(sbd,t);t1=subs(t)syms t;sd1=2-vd*t1+vd*(t-t1);
sgd='2+s/2+vg*t=2-vd*t1+vd*(t-t1)';t=solve(sgd,t);t2=subs(t)
sd2=2-vd*t1+vd*(t2-t1)-vd*(t-t2);te=0.5-ts;t=0:0.001:te;
sb=2-s-vb*t;sg=2+s/2+vg*t;plot(t,sb,'b-.',t,sg,'g--')hold on
t=0:0.001:t1;sd=2-vd*t;plot(t,sd,'r')hold on
t=t1:0.001:t2;sd1=2-vd*t1+vd*(t-t1);plot(t,sd1,'r')hold on
syms t;sbd1='2-s-vb*t=2-vd*t1+vd*(t2-t1)-vd*(t-t2)';
t=solve(sbd1,t);t3=subs(t)
if t3>te t=te;sd2=2-vd*t1+vd*(t2-t1)-vd*(t-t2)
plot(te,sd2,'*');hold on
t=t2:0.001:te;sd2=2-vd*t1+vd*(t2-t1)-vd*(t-t2);plot(t,sd2,'r')
else t=t2:0.001:t3;sd2=2-vd*t1+vd*(t2-t1)-vd*(t-t2);
plot(t,sd2,'r');hold on
syms t;sgd='2+s/2+vg*t=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t-t3)';
t=solve(sgd,t);t4=subs(t)
if t4>te t=te;sd3=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t-t3)
plot(te,sd3,'*');hold on
t=t3:0.001:te;sd3=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t-t3);
plot(t,sd3,'r');hold on
else t=t3:0.001:t4;
sd3=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t-t3);
plot(t,sd3,'r');hold on
syms t;sbd='2-s-vb*t=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t4-t3)-vd*(t-t4)';t=solve(sbd,t);t5=subs(t)
if t5>te t=te;sd4=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t4-t3)-vd*(t-t4)
plot(te,sd4,'*');hold on t=t4:0.001:te;
sd4=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t4-t3)-vd*(t-t4);
plot(t,sd4,'r');hold on
else t=t4:0.001:t5;
sd4=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t4-t3)-vd*(t-t4);
plot(t,sd4,'r');hold on
syms t;sgd='2+s/2+vg*t=2-vd*t1+vd*(t2-t1)-vd*(t3-t2)+vd*(t4-t3)-vd*(t5-t4)+vd*(t-t5)';
t=solve(sgd,t);t6=subs(t) end end end
在Matlab中運行fm.m文件,分別輸入s=0.2,s=0.1,s=0.05,s=0.025的值,得到結果如表1和圖6。
表1 小狗反應時間及最終位置
圖6 s=0.2,s=0.1,s=0.05,s=0.025時的路線圖
從表1中可以看出,當男孩離家s=0.2公里時,小狗才發(fā)現男孩離家,即小狗的反應時間為180秒,當男孩、女孩到達學校時,小狗正好到家。當男孩離家s=0.1公里時,小狗才發(fā)現男孩離家,即小狗的反應時間為90秒,當男孩、女孩到達學校時,小狗在家和男孩學校中間,離家1.5公里處。當男孩離家s=0.05公里時,小狗才發(fā)現男孩離家,即小狗的反應時間為45秒,當男孩、女孩到達學校時,小狗在家和男孩學校中間,離家0.75公里處。當男孩離家s=0.025公里時,小狗才發(fā)現男孩離家,即小狗的反應時間為22.5秒,當男孩、女孩到達學校時,小狗在家和女孩學校中間,離家0.75公里處。因此,隨著小狗發(fā)現男孩離家的反應時間不同,小狗的最終位置也不同,可以在女孩學校、家、男孩學校之間的任何地方。
傳統(tǒng)的高等數學課程教學偏重理論性,同學們不好理解數學的概念,不會繁雜的數學計算,尤其是缺少利用數學知識解決問題的能力。將Matlab引入高等數學課程教學,借助Matlab強大的繪圖功能可以更加直觀地講解高等數學中晦澀難懂的極限及定積分的概念,增強同學們的學習興趣。借助Matlab強大的符號計算及數值計算功能,可以快速地求出函數的極限、導數和積分,可以解決手工計算無法算出的數值積分和收斂級數的和。Matlab輔助數學建模,可以高效地求解數學模型,并利用數據進行模型檢驗,增強了同學們利用數學知識解決實際問題的能力。