王鳳,郝向英
(武漢工程大學(xué) 光電信息與能源工程學(xué)院,湖北 武漢)
Matlab是一款應(yīng)用十分廣泛的數(shù)學(xué)分析軟件[1]。Matlab以矩陣作為數(shù)據(jù)操作的基本形式,并且還提供了很多數(shù)值計算函數(shù),使得運算變得非常簡潔、方便。Matlab也提供了很多繪圖命令,不僅可以繪制各種圖形,還可以對圖形進行修飾處理[2]。此外,Matlab還具有強大的符號計算功能、程序語言設(shè)計功能和工具箱的擴展功能。在很多高等學(xué)校,Matlab成為線性代數(shù)、自動控制理論、數(shù)字信號處理、動態(tài)系統(tǒng)仿真、圖像處理等諸多課程的基本教學(xué)工具[3-5]。Matlab也是很多科學(xué)研究工作者進行理論數(shù)值模擬,實驗數(shù)據(jù)分析的首選工具。熟練掌握Matlab語言特點和命令操作是學(xué)好Matlab的關(guān)鍵。由于Matlab基礎(chǔ)語言較為簡單,以往,對該部分的講解側(cè)重于命令的使用方法,并且花費很少的課程時間去講解該部分。這種教學(xué)模式會使學(xué)生感到枯燥無味,并且無法理解每條命令的真正含義,從而導(dǎo)致學(xué)生學(xué)習(xí)興趣和專注力的降低[6-7]。
對比手法是文學(xué)創(chuàng)作中常用的一種表現(xiàn)手法,可以將兩種對應(yīng)的事物對照比較,使形象更鮮明,感受更強烈。對比手法已經(jīng)應(yīng)用于一些文學(xué)類教學(xué)中[8-9],并取得了較好的課堂效果。將對比手法應(yīng)用于Matlab教學(xué)中,在對一些命令講解時,除了講解該命令的使用規(guī)則,還對比講解該命令在數(shù)學(xué)上的求解過程,不僅使學(xué)生理解每條命令的具體含義,還幫助學(xué)生回顧其他課程的相關(guān)內(nèi)容。據(jù)觀察,學(xué)生往往對實用性強的課程表現(xiàn)出極大的興趣。融入對比手法的Matlab課程講授可突顯Matlab軟件在實際應(yīng)用方面的便利和強大之處,從而調(diào)動學(xué)生的積極性和主觀能動性。
矩陣的乘法是Matlab的基本算術(shù)運算之一。其在《MATLAB程序設(shè)計與應(yīng)用》[10]第2章第5小節(jié)中講到。
首先,我們先講在線性代數(shù)中,矩陣的乘法如何求解。對于兩個矩陣A和B,若矩陣A為m行n列的矩陣,矩陣B為n行p列的矩陣,則矩陣C=A×B為m行p列的矩陣,矩陣C中各個元素為這里要注意的是矩陣A的列數(shù)要等于矩陣B的行數(shù),矩陣A乘以矩陣B才得以運行。接著,舉一個具體的實例。若矩陣則按照上述公式得到矩陣以矩陣C中第一行一列的元素為例,C(1,1)=A(1,1)×B(1,1)+A(1,2)×B(2,1)=1×1+2×4=9。
接下來,對比在Matlab軟件中矩陣的乘法如何計算。在Matlab軟件中,矩陣乘法用*這個命令,要得到兩個矩陣A和B的乘積,需在命令行窗口輸入A*B,并按Enter鍵,即可得到結(jié)果。以上述實例(一)中的矩陣A和B為例,具體命令如下:
>> A=[1,2;3,4];
>> B=[1,2,3;4,5,6];
>> C=A*B
C =
9 12 15
19 26 33
逆矩陣是矩陣?yán)碚撝泻苤匾膬?nèi)容,逆矩陣的求法自然也是線性代數(shù)研究的重點內(nèi)容之一。在《MATLAB程序設(shè)計與應(yīng)用》[10]第3章第2小節(jié)中,講到矩陣的逆:對于一個方陣A,若存在一個與其同階的方陣B,使得為單位矩陣,則稱B為A的逆矩陣,A也為B的逆矩陣。
首先,我們先講解線性代數(shù)中矩陣的逆如何求解。對于任一二階方陣其逆矩陣A*是方陣A的伴隨矩陣,A*為方陣A的余子式M的轉(zhuǎn)置。為方陣A的行列式的值。方陣A的余子式同樣地,給出一個實例,對于方陣先求出方陣A的余子式即得方陣A的伴隨矩陣接著求出方陣A的行列式的值可得到方陣A的逆矩陣
下面,我們對比在Matlab軟件中矩陣逆的求法。在Matlab中,矩陣逆可用一個命令inv求出。在命令行窗口,我們輸入inv(A),并按Enter鍵,即可得到結(jié)果。以上述實例(二)中的方陣A為例,具體命令如下:
>> A=[1,2;3,4];
>> inv(A)
ans =
-2.0000 1.0000
1.5000 -0.5000
在《MATLAB程序設(shè)計與應(yīng)用》[10]第3章第2小節(jié)中講到了非齊次線性方程組的求解。線性方程組是指由n個方程構(gòu)成的線性方程組:

當(dāng)b1,b2…bn不全為零時,為非齊次線性方程組。其中為系數(shù)矩陣,非齊次線性方程組可表示為Ax=b,在其左右兩邊各左乘系數(shù)矩陣的逆矩陣A-1,得x=A-1b,即非齊次線性方程組的解可由系數(shù)矩陣A的逆矩陣乘以b得到。
接著我們對比在Matlab中非齊次線性方程組是如何求解的。由實例(一),我們知道在Matlab軟件中,矩陣的逆使用命令函數(shù)inv。由實例(二),我們知道Matlab軟件中,矩陣的乘法使用命令*。因此,我們在命令行窗口輸入x=inv(A)*b,即可得到非齊次線性方程組的解。以上述實例(三)中的非齊次線性方程組為例,具體命令如下:
>> A=[1,2,3;1,4,9;1,8,27];
>> b=[5;-2;6];
>> x=inv(A)*b
x =
23.0000
-14.5000
3.6667
當(dāng)線性方程組(1)中的b1,b2…bn全為零時,為齊次線性方程組。當(dāng)系數(shù)矩陣A經(jīng)過初等行變換所化到的行階梯形矩陣的非零行行數(shù)小于A的列數(shù)時,齊次線性方程組有非零解。與非齊次線性方程組不同,齊次線性方程組的解不能運用系數(shù)矩陣A的逆矩陣來求解。給出一個實例,講解齊次線性方程組的求解方法。若一個齊次線性方程組為其系數(shù)矩陣求該齊次線性方程組的解,先對系數(shù)矩陣A進行初等行變換,分別進行將矩陣A中的第三行減去四倍的第一行,第二行減去二倍的第一行,得接著將第三行減去第二行得此矩陣是最簡化的系數(shù)矩陣,其對應(yīng)的方程組為令z=k,k為任意實數(shù),原齊次線性方程組的解為
接著我們對比在Matlab中,齊次線性方程的解如何求得。在命令行窗口輸入x=null(A),即可得到齊次線性方程組的非零解。值得注意的是,齊次線性方程組存在多組非零解,用Matlab求解,只可得到其中一組非零解。以上述實例(四)中的齊次線性方程組為例,具體命令如下:
>> A=[1,2,-1;2,3,1;4,7,-1];
>> x=null(A)
x =
-0.8452
0.5071
0.1690
在《MATLAB程序設(shè)計與應(yīng)用》[10]第3章第4小節(jié)中講到了矩陣的特征值與特征向量。對于n階方陣A,若Aξ=λξ成立,則λ和ξ是方陣A的特征值和特征向量。等式Aξ=λξ等價于(A-λI)ξ=0,I是單位矩陣。若使方程(A-λI)ξ=0有非零解,則其系數(shù)行列式|A-λI|必須等于0。
接著我們對比在Matlab中,方陣的特征值與特征向量如何求得。在Matlab中,我們用eig函數(shù)求方陣的特征值和特征向量,其調(diào)用格式為[X,D]=eig(A),D是一個對角陣,其對角線上的元素為方陣A的全部特征值,X是與D同階的方陣,其各列是對角陣D中各特征值相應(yīng)的特征向量。值得注意的是,方陣A在某一特征值下對應(yīng)多組特征向量,用Matlab求解,只可得到其中一組特征向量。以上述實例(五)中的方陣A為例,具體命令如下:
>> A=[2,1;3,0];
>> [X,D]=eig(A)
X =
0.7071 -0.3162
0.7071 0.9487
D =
3.0000 0
0 -1.0000
在《MATLAB程序設(shè)計與應(yīng)用》[10]第6章第2小節(jié)中講到了多項式求根。多項式是指由若干個單項式相加組成的代數(shù)式,其形如以2次多項式為例,2次多項式形如在數(shù)學(xué)上,我們一般用配方法來求其根,其兩個根分別是舉一個實例,對于2次多項式用配方法可得其兩個根分別是x1=1.099和x2=-9.099。
下面,我們對比在Matlab軟件中如何計算多項式的根。在Matlab軟件中,我們可以用三種方法來計算多項式的根,其中最簡單的一種是運用命令函數(shù)roots。值得注意的是,在Matlab中,多項式可由一個行向量表示,其各個元素分別為各個單項式的系數(shù),并且按照從高次冪依次往低次冪排布。以上述實例(六)中的2次多項式為例,具體命令如下:
>> P=[1,8,-10];
>> x=roots(P)
x =
-9.0990
1.0990
第二種計算多項式的根的方法是利用多項式的伴隨矩陣求得。多項式的伴隨矩陣對應(yīng)的特征值,即為多項式的根。在Matlab中,我們運用函數(shù)compan求多項式的伴隨矩陣。在實例(五)中已講到用eig函數(shù)求某方陣的特征值。該方法的具體命令如下:
>> P=[1,8,-10];
>> A=compan(P);
>> x=eig(A)
x =
-9.0990
1.0990
第三種計算多項式的根的方法是利用到《MATLAB程序設(shè)計與應(yīng)用》[10]第5章第1小節(jié)中講到的二維圖形繪圖法。我們可以提供一組x坐標(biāo),并將其帶入多項式中。令多項式的值為y坐標(biāo),繪制分別以x和y為橫、縱坐標(biāo)的二維曲線。這條二維曲線與y=0曲線的交點即為多項式的根。該方法的具體命令如下:
>> x=[-15:0.1:15];
>> p=x.^2+8*x-10;
>> figure
>> plot(x,p)
>> grid on

圖1 實例(六)中的2次多項式y(tǒng)=x2+8x-10
從以上六個實例看出,運用Matlab軟件后,很多在數(shù)學(xué)中較為復(fù)雜的解法變得簡潔,方便。通過將數(shù)學(xué)解法與Matlab的命令操作進行對比,使得學(xué)生深入地理解了Matlab每條命令的意義,便于學(xué)生記憶Matlab的基礎(chǔ)語言和命令。
Matlab課程包括理論講授和上機實驗操作兩部分。在Matlab理論講授過程中引入對比手法,經(jīng)過近幾年的課程實踐,從學(xué)生的反饋來看,課程得到了認(rèn)可,學(xué)生的學(xué)習(xí)熱情得到了激發(fā)。很多學(xué)生反饋,對比某一運算的數(shù)學(xué)解法和其在Matlab中的命令操作,幫助他們理解每條命令的具體含義,并加速他們對Matlab基礎(chǔ)命令的記憶。并且,在上機實驗操作時,他們不再是機械化地敲命令,而是會思考和分析命令運行后得到的結(jié)果。此外,Matlab課程安排在高等數(shù)學(xué),線性代數(shù),矩陣論等課程之后,該教學(xué)方法還幫助他們復(fù)習(xí)了相關(guān)課程中的知識要點。
本文針對Matlab基礎(chǔ)語言和命令講解中存在的問題進行分析,提出應(yīng)用對比手法,通過對比Matlab的命令操作及其數(shù)學(xué)解法,加深學(xué)生對Matlab命令的理解。經(jīng)過近幾年的不斷摸索與實踐,課程得到了學(xué)生的認(rèn)可,學(xué)習(xí)熱情得以提高。在接下來的教學(xué)過程中,將進一步優(yōu)化教學(xué)內(nèi)容,更加深入地探索有利于培養(yǎng)學(xué)生自主性,創(chuàng)新性以及解決問題的能力。