師向云,周學勇
(信陽師范學院 數(shù)學與統(tǒng)計學院,河南 信陽 464000)
常微分方程是高等院校數(shù)學類本科專業(yè)開設的一門必修專業(yè)課程,目前各個院校常微分方程的課程教學通常以求解各種微分方程(組)解析解為主,但在應用微分方程解決實際問題時,往往要求方程(組)的解必須能說明實際現(xiàn)象,以及根據(jù)解的情況來進行問題分析和制定出相應的對策.這就要求得到的常微分方程解是利于分析和實際應用的.但是實際上大多數(shù)的方程(組)都沒有解析解,如大部分的非線性方程只能求數(shù)值解.目前絕大部分常微分方程教材都很少涉及數(shù)值解法,如果不借助于教學軟件,教師給學生講解數(shù)值解法也比較困難.在現(xiàn)代微分方程研究及應用中,尋求具體微分方程的解析解的特殊技巧已經(jīng)不再是主流課題,而應用中提出的各種具有實際背景模型的微分方程又往往是非線性方程,尋找這些方程的解析解,絕大部分由于幾何理論這一思想方法具有高度的抽象性和概括性,尤其是介紹利用定性分析方法考慮微分方程時,抽象的概念和定理使得初學者難以直觀地理解定性分析方法的實質,這時如果用數(shù)學軟件繪制出幾何圖形就能將抽象的概念與結論直觀地呈現(xiàn)出來.
Matlab 是常用的數(shù)學軟件之一,它在在數(shù)值計算方面相對于其它數(shù)學軟件首屈一指.文獻[1-3]指出:利用Matlab 軟件可方便地求解微分方程(組),得到微分方程(組)的解析解,并繪出解曲線和軌線圖.文獻[4-5]也表明可以利用Matlab 求解常微分方程線素場、求解微分方程的初值解、繪出二階與三階微分方程(組)解曲線、相位圖.因此為了適應新形勢下的數(shù)學教學科研工作任務,可以將Matlab 作為輔助應用于目前的常微分方程教學中.為了能夠更好地提高課堂教學效率,本文將進一步討論Matlab 對微分方程教學的作用,我們以各個高校廣泛使用的王高雄主編的常微分方程教材①為例,具體討論Matlab 在常微分方程各章節(jié)教學中的應用.
我們將從利用Matlab 求非線性微分方程的解析解,求微分方程(組)初值問題的數(shù)值解,利用Matlab 繪制解曲線解釋奇解的幾何意義、利用Matlab 繪制線素場理解方向場,利用Matlab 繪制非線性方程組相空間的軌線等幾個方面,具體給出Matlab 在微分方程教學中的應用.
求解微分方程的解析解通常是初等解法,在常微分方程課程教學中,一階微分方程最重要的教學任務就是利用初等解法求方程的解,如用變量分離法求解一階可分離變量方程,用常數(shù)變易法求解一階常系數(shù)線性微分方程,用積分因子法將微分方程化為恰當方程,再用全微分法來求解.可以看出這些求解方法都是針對某一類特定微分方程來說的,而且各種方法在數(shù)學技巧上均具有一定難度.有時遇到一些非線性問題還無法用初等解法解出方程的解,而借助數(shù)學軟件Matlab 則可以求一些非線性的一階微分方程的解析解.應用Matlab 中求微分方程(組)解析解的命令:dsolve,它能求出通解和特解.并且可用Matlab 的ezplot 繪圖命令繪出特解積分曲線.例如可用Matlab 求一階方程= 2 +y2滿足初值y(0)= 2 的解析解.Matlab 代碼如下:
syms y
dsolve('Dy=2 + (1/2)*y^2', 'y(0) =2','x')
從而容易得到所求方程的特解:y=2tan(x+
對某些微分方程存在一條特殊的積分曲線,它不屬于這個方程的積分曲線族,但是在它上的每一點,都有積分曲線族中的一條積分曲線和它相切于這一點,我們稱該積分曲線所對應的解為方程的奇解[1].僅從定義方面我們很難理解奇解是怎樣的一個解,也不是很清楚奇解的幾何意義.但我們可用Matlab 畫出這類方程的一些積分曲線,這樣能快速和直觀地去判斷奇解的存在性,從而理解奇解的幾何意義. 例如方程y =xy′+的通解為y=cx+,奇解為y=
我們可取一些特殊的c,利用Matlab 來繪制積分曲線族和奇解的曲線.Matlab 文件代碼如下:
clear
x=linspace(-1,1,200)
for c=-1:0.1:1
y1=c.*x+sqrt(1+c.^2);
plot(x,y1,'-k')
end
y=sqrt(1-x.^2)
plot(x,y,'b')
hold on
由圖1 容易看出方程的其它解曲線與特解y=所對應的曲線相切,因此很容易理解y=是奇解.
圖1 方程y = xy′ + 1 + y′2 通解和奇解曲線
圖2 方程組(1)的向量場
向量場是一個非常抽象的概念, 同學們往往很難去理解,若用Matlab 繪制出向量場的圖形,就可以看到一些布滿整個坐標的短直線所形成的圖像,從而容易看出積分曲線的走向,這樣對學生進行講解,則能使學生從直觀上去認識向量場,從而理解斜率場、相空間、向量場及軌線等重要概念.繪制向量場所用的函數(shù):quiver,格式:quiver(x,y,u,v),其中x和y表示向量起點,u和v確定向量的方向.從向量場圖中可以看出該方程各個積分曲線的走向.
例1 用Matlab 繪制下面微分方程組的向量場.
解:Matlab 代碼如下:
x=-2:0.2:2;
y=-2:0.2:2;
[x,y]=meshgrid(x,y);
d=sqrt((1-x.^2-y.^2).^2+(x.*y).^2);
u =(1-x.^2-y.^2)./d;
v =(x.*y)./d;
hold on
quiver(x,y,u,v,0.5,'b');
由于絕大部分的一階微分方程是不能用初等積分法解出來,但在實際應用中往往又必須知道它的解,這時就可用Matlab 求出它的數(shù)值解,所以再常微分方程教學時,還要注意教授學生學會應用MAtlab 求方程的數(shù)值解.在Matlab 中求解的函數(shù)有很多,包括ode45, ode113, ode15s,ode23s, ode23t, ode23tb 等,其中常用的兩個分別為ode23( )和ode45( ).下面我們給出例子來說明.
例2 用Matlab 求下面初值問題的解.
解:首先創(chuàng)建一個函數(shù)文件,文件名為odefun.m,代碼如下:
function dy=odefun(t,y)
dy=zeros(3,1);
dy(1)=-y(2) * y(3);
dy(2)=y(1) * y(3);
dy(3) =0.5 * y(1) * y(2);
然后創(chuàng)建命令文件,文件名為testode45.m,代碼如下:
clc
tspan=[0,50];
y0=[1,1,1]; %
[T,Y]=ode45( @odefun, tspan, y0 ); %
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.') %
圖3 微分方程組(2)的解曲線圖
legend('y_1','y_2','y_3')
圖4 微分方程組(2)的解的軌線圖
常微分方程[1]第六章內容有關非線性方程組的定性理論的知識,它是本科階段和研究生階段之間的銜接內容,但在本科階段,學生普遍反應較為抽象,難以理解.如若能夠得到相空間的軌線圖,則教師講解起來就比較形象,學生很容易接受理解.如圖4 為微分方程組(2)在相空間的軌線圖,容易看出方程組(2)存在一組周期解.
常微分方程[1]第六章介紹了常微分方程穩(wěn)定性的概念與判定方法,這是學生學習的一個難點,但它又與后續(xù)研究生課程內容銜接,也是各個高校研究生復試時常出的考題.事實上,如果能夠運用Matlab 繪出方程在零點的軌線圖,可非常容易判斷微分方程零解的穩(wěn)定性.
例3 判斷如下系統(tǒng)零解的穩(wěn)定性
解:運用Matlab 繪制系統(tǒng)(3)的軌線圖, 程序如下:
clear; clc;
[x,y]=meshgrid(linspace(-0.1,0.1));
streamslice(x,y,-x-y+(x-y)*(x.^2+y.^2),x-y+(x+y)*(x.^2+y.^2));
xlabel('x');ylabel('y');
由圖5 及零解穩(wěn)定性定義可知,方程組(3)的零解是一致漸近穩(wěn)定的.
圖5 系統(tǒng)(3)在(0,0)點附近的軌線圖
用Matlab 輔助微分方程課程教學,其上課形式為教師上課用多媒體授課,教師在授課過程中隨時穿插使用Matlab 軟件操作演示.比如教給學生一些基本的求解命令,在課堂上能夠畫出簡單微分方程的解曲線給學生以展示,常微分方程課程教材①共有七個章節(jié)的內容,章節(jié)結束安排一次實驗課程,讓學生運用Matlab 進行方程求解和繪圖訓練.
將Matlab 融入課堂教學,可使得常微分方程課程的授課形式較傳統(tǒng)的板書式教學有較大的改變,可以使教師和學生擺脫繁瑣的數(shù)學演算和數(shù)值計算的過程,把學生的注意力集中到解題方法上來,從而優(yōu)化教學內容,化繁為簡,化抽象為具體.用Matlab 軟件將難以理解的概念和難以想象的圖形形象地表示出來,使所有學生更加深入地理解微分方程解的幾何意義,從而能使學生加深對本課程的掌握,并且引導學生將理論應用于實際,改變學生對該課程的傳統(tǒng)認識,實現(xiàn)教與學的良性互動,提高教學效果,并進一步為后繼課程打下基礎.
注釋:
①王高雄等編著《常微分方程》(第三版),高等教育出版社,2006.