王鳳,郝向英
(武漢工程大學 光電信息與能源工程學院,湖北 武漢)
Matlab是一款應用十分廣泛的數學分析軟件[1]。Matlab以矩陣作為數據操作的基本形式,并且還提供了很多數值計算函數,使得運算變得非常簡潔、方便。Matlab也提供了很多繪圖命令,不僅可以繪制各種圖形,還可以對圖形進行修飾處理[2]。此外,Matlab還具有強大的符號計算功能、程序語言設計功能和工具箱的擴展功能。在很多高等學校,Matlab成為線性代數、自動控制理論、數字信號處理、動態系統仿真、圖像處理等諸多課程的基本教學工具[3-5]。Matlab也是很多科學研究工作者進行理論數值模擬,實驗數據分析的首選工具。熟練掌握Matlab語言特點和命令操作是學好Matlab的關鍵。由于Matlab基礎語言較為簡單,以往,對該部分的講解側重于命令的使用方法,并且花費很少的課程時間去講解該部分。這種教學模式會使學生感到枯燥無味,并且無法理解每條命令的真正含義,從而導致學生學習興趣和專注力的降低[6-7]。
對比手法是文學創作中常用的一種表現手法,可以將兩種對應的事物對照比較,使形象更鮮明,感受更強烈。對比手法已經應用于一些文學類教學中[8-9],并取得了較好的課堂效果。將對比手法應用于Matlab教學中,在對一些命令講解時,除了講解該命令的使用規則,還對比講解該命令在數學上的求解過程,不僅使學生理解每條命令的具體含義,還幫助學生回顧其他課程的相關內容。據觀察,學生往往對實用性強的課程表現出極大的興趣。融入對比手法的Matlab課程講授可突顯Matlab軟件在實際應用方面的便利和強大之處,從而調動學生的積極性和主觀能動性。
矩陣的乘法是Matlab的基本算術運算之一。其在《MATLAB程序設計與應用》[10]第2章第5小節中講到。
首先,我們先講在線性代數中,矩陣的乘法如何求解。對于兩個矩陣A和B,若矩陣A為m行n列的矩陣,矩陣B為n行p列的矩陣,則矩陣C=A×B為m行p列的矩陣,矩陣C中各個元素為這里要注意的是矩陣A的列數要等于矩陣B的行數,矩陣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鍵,即可得到結果。以上述實例(一)中的矩陣A和B為例,具體命令如下:
>> A=[1,2;3,4];
>> B=[1,2,3;4,5,6];
>> C=A*B
C =
9 12 15
19 26 33
逆矩陣是矩陣理論中很重要的內容,逆矩陣的求法自然也是線性代數研究的重點內容之一。在《MATLAB程序設計與應用》[10]第3章第2小節中,講到矩陣的逆:對于一個方陣A,若存在一個與其同階的方陣B,使得為單位矩陣,則稱B為A的逆矩陣,A也為B的逆矩陣。
首先,我們先講解線性代數中矩陣的逆如何求解。對于任一二階方陣其逆矩陣A*是方陣A的伴隨矩陣,A*為方陣A的余子式M的轉置。為方陣A的行列式的值。方陣A的余子式同樣地,給出一個實例,對于方陣先求出方陣A的余子式即得方陣A的伴隨矩陣接著求出方陣A的行列式的值可得到方陣A的逆矩陣
下面,我們對比在Matlab軟件中矩陣逆的求法。在Matlab中,矩陣逆可用一個命令inv求出。在命令行窗口,我們輸入inv(A),并按Enter鍵,即可得到結果。以上述實例(二)中的方陣A為例,具體命令如下:
>> A=[1,2;3,4];
>> inv(A)
ans =
-2.0000 1.0000
1.5000 -0.5000
在《MATLAB程序設計與應用》[10]第3章第2小節中講到了非齊次線性方程組的求解。線性方程組是指由n個方程構成的線性方程組:
當b1,b2…bn不全為零時,為非齊次線性方程組。其中為系數矩陣,非齊次線性方程組可表示為Ax=b,在其左右兩邊各左乘系數矩陣的逆矩陣A-1,得x=A-1b,即非齊次線性方程組的解可由系數矩陣A的逆矩陣乘以b得到。
接著我們對比在Matlab中非齊次線性方程組是如何求解的。由實例(一),我們知道在Matlab軟件中,矩陣的逆使用命令函數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
當線性方程組(1)中的b1,b2…bn全為零時,為齊次線性方程組。當系數矩陣A經過初等行變換所化到的行階梯形矩陣的非零行行數小于A的列數時,齊次線性方程組有非零解。與非齊次線性方程組不同,齊次線性方程組的解不能運用系數矩陣A的逆矩陣來求解。給出一個實例,講解齊次線性方程組的求解方法。若一個齊次線性方程組為其系數矩陣求該齊次線性方程組的解,先對系數矩陣A進行初等行變換,分別進行將矩陣A中的第三行減去四倍的第一行,第二行減去二倍的第一行,得接著將第三行減去第二行得此矩陣是最簡化的系數矩陣,其對應的方程組為令z=k,k為任意實數,原齊次線性方程組的解為
接著我們對比在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程序設計與應用》[10]第3章第4小節中講到了矩陣的特征值與特征向量。對于n階方陣A,若Aξ=λξ成立,則λ和ξ是方陣A的特征值和特征向量。等式Aξ=λξ等價于(A-λI)ξ=0,I是單位矩陣。若使方程(A-λI)ξ=0有非零解,則其系數行列式|A-λI|必須等于0。
接著我們對比在Matlab中,方陣的特征值與特征向量如何求得。在Matlab中,我們用eig函數求方陣的特征值和特征向量,其調用格式為[X,D]=eig(A),D是一個對角陣,其對角線上的元素為方陣A的全部特征值,X是與D同階的方陣,其各列是對角陣D中各特征值相應的特征向量。值得注意的是,方陣A在某一特征值下對應多組特征向量,用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程序設計與應用》[10]第6章第2小節中講到了多項式求根。多項式是指由若干個單項式相加組成的代數式,其形如以2次多項式為例,2次多項式形如在數學上,我們一般用配方法來求其根,其兩個根分別是舉一個實例,對于2次多項式用配方法可得其兩個根分別是x1=1.099和x2=-9.099。
下面,我們對比在Matlab軟件中如何計算多項式的根。在Matlab軟件中,我們可以用三種方法來計算多項式的根,其中最簡單的一種是運用命令函數roots。值得注意的是,在Matlab中,多項式可由一個行向量表示,其各個元素分別為各個單項式的系數,并且按照從高次冪依次往低次冪排布。以上述實例(六)中的2次多項式為例,具體命令如下:
>> P=[1,8,-10];
>> x=roots(P)
x =
-9.0990
1.0990
第二種計算多項式的根的方法是利用多項式的伴隨矩陣求得。多項式的伴隨矩陣對應的特征值,即為多項式的根。在Matlab中,我們運用函數compan求多項式的伴隨矩陣。在實例(五)中已講到用eig函數求某方陣的特征值。該方法的具體命令如下:
>> P=[1,8,-10];
>> A=compan(P);
>> x=eig(A)
x =
-9.0990
1.0990
第三種計算多項式的根的方法是利用到《MATLAB程序設計與應用》[10]第5章第1小節中講到的二維圖形繪圖法。我們可以提供一組x坐標,并將其帶入多項式中。令多項式的值為y坐標,繪制分別以x和y為橫、縱坐標的二維曲線。這條二維曲線與y=0曲線的交點即為多項式的根。該方法的具體命令如下:
>> x=[-15:0.1:15];
>> p=x.^2+8*x-10;
>> figure
>> plot(x,p)
>> grid on
圖1 實例(六)中的2次多項式y=x2+8x-10
從以上六個實例看出,運用Matlab軟件后,很多在數學中較為復雜的解法變得簡潔,方便。通過將數學解法與Matlab的命令操作進行對比,使得學生深入地理解了Matlab每條命令的意義,便于學生記憶Matlab的基礎語言和命令。
Matlab課程包括理論講授和上機實驗操作兩部分。在Matlab理論講授過程中引入對比手法,經過近幾年的課程實踐,從學生的反饋來看,課程得到了認可,學生的學習熱情得到了激發。很多學生反饋,對比某一運算的數學解法和其在Matlab中的命令操作,幫助他們理解每條命令的具體含義,并加速他們對Matlab基礎命令的記憶。并且,在上機實驗操作時,他們不再是機械化地敲命令,而是會思考和分析命令運行后得到的結果。此外,Matlab課程安排在高等數學,線性代數,矩陣論等課程之后,該教學方法還幫助他們復習了相關課程中的知識要點。
本文針對Matlab基礎語言和命令講解中存在的問題進行分析,提出應用對比手法,通過對比Matlab的命令操作及其數學解法,加深學生對Matlab命令的理解。經過近幾年的不斷摸索與實踐,課程得到了學生的認可,學習熱情得以提高。在接下來的教學過程中,將進一步優化教學內容,更加深入地探索有利于培養學生自主性,創新性以及解決問題的能力。