呂洪升
(巢湖學院,安徽 巢湖 238000)
數學教學中,數據處理、繪圖等費時費力,且無論用PowerPoint還是Word設計教案,所插入的數學公式不能與其它文字統一處理,必須單獨編輯,就這一點,教師備課就得花不少無謂時間,何況數學公式軟件只能編輯公式而不能實現數據分析或計算呢。為化解這個矛盾,本人在概率統計和離散數學教學中引入工程軟件Matlab作為后臺工具,在PowerPoint或Word界面上無縫隙鏈接Matlab的強大數據處理、繪圖和簡單模擬等功能[1],而不用考慮學生是否具備Matlab程序設計語言的基礎,也不用刻意補充講授該語言的各種規定和程序設計的語法體系,取得了良好的教學效果。作為教學經驗總結或教學研究,這里試圖將Matlab作為矩陣教學的后臺工具,仍在Microsoft-Word平臺上介紹矩陣的各種操作,以提高高等代數課堂教與學的興趣和教學效果。
求一個已知矩陣A(在解題中給出)的行列式、逆矩陣B、特征值D和特征向量V。
解 (只需兩步:輸入、選擇執行 )。
第一步:輸入

第二步:選擇執行(圖1)

結果如下:




圖1
1.2.1 錄入數據和指令:(1)輸入矩陣 A,所有元素必須放在矩陣標識符——中括號 “[]”內,逗號“,”或空格”分隔矩陣列,分號“;”或回車鍵“”分隔矩陣的行[1];(2)輸入求矩陣行列式函數“det”、求逆矩陣函數“inv”和特征值、特征向量函數“eig”[1]。
1.2.2 執行計算: 選中輸入的四行字符,擊“加載項/notebook/Evaluate Cell”菜單(見圖1),選中文字立刻變成綠色,計算結果以藍色字符顯示。
1.2.3 結果顯示的一般規律:執行指令后,若有結果輸出,一般依次顯示在選中行的下方。命令行左邊若有字母和賦值號“=”,結果就賦給該命令左邊的字母(如第三行的逆矩陣B),若左邊沒有任何符號,結果一律用“ans”表示(如第二行的行列式值12);要不想顯示某個指令的輸出結果,就在該指令行后面加“;”且與該行一并選中[1](如第一行的矩陣A)。第四行的“eig”函數有些特別,它同時求得矩陣特征向量、特征值,并分別用V和D表示。
1.2.4 解題分析:通常情況下,即使矩陣 A不太復雜,課堂上動態解答這一結果也是不太容易的,而在引例環境下,只要熟悉三個指令,輸入四行,選擇一下希望輸出的結果,計算機就會現場給出答案,而且輸入的公式或輸出的數字符號等可與其它文字統一編輯,大大方便了數學教案的個性化編排。再看解題結果,輸入的四行數據都變成了綠色,且被一對灰色中括號括住,這就是Word中能與Matlab接口并可被其執行的指令,稱為輸入細胞;第二、三、四行執行結果被以藍色字符顯示,是系統執行該輸入細胞的結果,稱為輸出細胞,第一行A因為后面的“;”而不顯示。
1.2.5 運行平臺剖析:這是一個Word平臺上的矩陣操作實例,是在工程軟件Matlab打開的前提下,利用兼Word文字處理和工程計算功能為一體的notebook核心模板M-book界面,從后臺調用了Matlab的函數或命令,前臺卻完全看不到,學生感到只要熟悉幾個功能函數或命令就能得到想要的計算結果,這種拿來即用的簡單工具師生都會喜歡,無論直接用于數學教學還是作為數學驗證,都是難得的好幫手。不論概率統計、離散數學還是微積分中繪圖、求導、求積分和解微分方程等,都有對應取之即用的簡單指令,對數學教師而言,最實用的可能是符號運算。而在信息科學和自動控制領域或教學中,該軟件更有用武之地。
從上面引例看到,我們的操作界面就是微軟的文字處理軟件Word,對現在任何一個大學生,使用都不會有問題。如何配置,也易如反掌,但我們的目的是在不增加學生學習負擔的前提下使用Matlab的簡單函數和基本命令,久而久之,學生不僅感覺方便、有趣且離不開,而這種解釋式、能集Fortran、Pascal、C語言等于一體的第四代程序設計語言[2]很簡單,易于掌握且功能特別強大,有數學教學中使用的基礎,學生一定會無師自通的。
下面簡述如何配置計算機并進入引例的環境。
2.1 Matlab的安裝和運行。早期的Matlab,由于容量大,安裝費時費力,很不容易,現在有綠色便攜版或云軟件系統 (百度一下就有許多資源),只要下載到U盤中,在任一部裝有Windows XP或Windows 7操作系統的PC機上就能即插即用,不用安裝,非常方便,當然在Unix平臺上使用也簡單,不需贅述。
2.2 notebook安裝。本機使用的操作系統是Windows 7,且假定已安裝了Microsoft Word2007(Windows和Word其它版本操作類似)。首先運行Matlab軟件,在其命令窗口輸入notebooksetup回車 (這里要注意notebook與后面 “-setup”的減號之間要空一格,否則系統報錯,安裝失敗),在歡迎界面中鍵入Microsoft Word2007前面的數字5(圖略),就完成了安裝。
2.3 notebook啟動,無論在Matlab還是在Word2007環境下,都有多種啟動方法。
在Matlab命令窗口,鍵入notebook,回車,新M-book模板文檔即可供編輯,操作的窗口就是我們常見的Word2007界面;
若先打開Word,擊“新建/我的模板/M-book.dot”文檔(見圖2),擊“確定”按鍵即進入空文檔編輯狀態。

圖2
編輯或打開已有文檔與Word通常操作完全一樣。
學生沒有Matlab基礎,教師在課堂上直接使用Matlab簡單函數處理數學教學中的數據問題,為引導學生逐漸熟悉和掌握Matlab部分功能,除課堂使用中自然介紹Matlab常用命令或函數的基本功能和調用格式外,還要講述在M-book中輸入的函數如何被執行,執行結果又以什么格式顯示和如何被調用等,以下逐一說明。
3.1.1 常規運算符號。Matlab以矩陣為基本操作元素,所以矩陣的加(+)、減(-)、乘(*)、乘方(^)、轉置(' )(當然還有左除、右除和按位乘、除等,有興趣者請查看相關資料)象小學算術里四則運算一樣簡單好用,輸入格式就是英文字符環境下普通Word文本格式。
3.1.2 特殊矩陣生成。普通矩陣的生成方法如引例的第一行A,但一些特殊矩陣有專門的函數生成,如ones、zeros、eye分別生成單位矩陣、全0 和全 1 矩陣[1],magic、rand(randn)、diag、compan分別生成魔方矩陣、隨機矩陣、對角矩陣和伴隨矩陣。線性代數中常用的Pascal、范德蒙矩陣可用函數Pascal和vander生成[1],想了解更多或每個函數的詳細用法,可借助“help”命令尋求幫助,輸入 “help vander”后回車,屏幕即顯示范德蒙函數的使用信息(如下文的幫助文字),想知道magic 的詳情,只要將“help vander”后面的“vander”用“magic”替代即可,如法炮制,可查詢任何函數的使用詳情。


綠色文字“help vander”是輸入細胞——用戶請求信息,其后藍色的輸出細胞——計算機反饋給用戶的幫助文字只保留了一部分,不僅顯示范德蒙函數的用法,還給出了范德蒙矩陣的定義。
例題1 創建3階均勻分布、正態分布隨機矩陣和5階范德蒙矩陣。
解 輸入對應的三個生成函數 (每個函數一行),其它操作同引例,結果如下:

從輸出結果可知矩陣生成函數的用法(其它函數類似),矩陣A是一個[0,1]上均勻分布的3階隨機矩陣,因為行末尾有“;”未顯示,B是3階標準正態分布隨機矩陣,C是所需的5階范德蒙矩陣,這里要注意第 3 行函數 vander(1:5)括號內的不同形式。
至此,引例中矩陣A、B已被重新賦值。一般情況下,只要本機不重新啟動且A、B沒有被重新賦值,A、B的數據保持不變,且隨時隨處可調用。
例題2 求矩陣A與B的積M。
解 輸入計算公式M=A*B,再設其為有結果輸出的輸入細胞(同引例)。結果如下:

顯然計算結果是例題1中兩個3階隨機矩陣的積。
若微機重啟后(或下次課)仍需使用以前數據矩陣A、B時,只要將原始錄入數據對應的行(最好行后加“;”)選中后,設為有結果輸出的輸入細胞(擊“/notebook/Evaluate Cell”菜單,見圖1)即可,不需重新輸入矩陣A、B。但要注意,若將例題1中三行如是執行后,矩陣A、B已不一樣,因為隨機函數每次生成的矩陣都不相同[3],除非設置重現,矩陣C保持不變。
如果希望一個矩陣每次課都能直接調用,就在輸入時定義其為自初始化細胞且永不被重新賦值。
3.1.3 常用的矩陣函數。除引例中介紹的求方陣的行列式、逆矩陣、特征值和特征向量函數外,rank可求矩陣的秩;其實引例中eig(A)是可對角化方陣A的特征分解函數,當A不可對角化(特征向量線性相關)時可用Schur(A)對A作科利分解,稍微推廣,還有針對正定矩陣的Cholesky分解和一般矩陣的LU分解、QR分解、SVD分解[4],分解名即函數名,使用與特征分解一樣,都非常方便。另外,兩個矩陣拼接函數也很實用,horzcat(A,B)是將兩個同行矩陣A、B水平合并成一個大矩陣,而函數 vertcat(A,B)能將兩個同列矩陣A、B垂直合并成一個矩陣。例如,判斷線性方程組AX=B是否有解,只要用語句K=horzcat(A,B)合并A、B得到增廣矩陣K,再計算矩陣A、K的秩 rank(A)、rank(K)就知道方程是否相容了。
3.1.4 矩陣信息和矩陣元素尋訪。矩陣最基本的信息是其尺寸,即矩陣維數 (包括高維矩陣)、各維的長度和元素個數,分別用函數nidims、numel和size獲取。矩陣元素尋訪有常用的雙下標方式和單下標方式,雙下標命令A(i,j)很自然讀取矩陣A的第i行第j列元素,如果輸入C(3,2),再選擇執行(圖1),立刻得到結果:

但單下標讀取與其它語言不同,Matlab規定先列后行[3],如果我們用C(:)將矩陣C轉換成一個列向量(第二列接在第一列后面,第三列接在第二列后面……,依次類推),就知道矩陣C雙下標元素 C(3,2)對應單下標元素 C(8)了。一般地,若A是一個m×n矩陣,則A的雙下標元素A(i,j)對應其單下標元素是 A[m×(j-1)+i],反過來也容易推算。另外,函數max(或min)可以找出矩陣每一列的最大值(最小值),很自然,max(max(A)(或 min(min(A))能求出整個矩陣的最大值(或最小值),而[MaxValue,MaxIndex]=max(A(:))還能輕松獲得A的最大值和最大值單下標索引號。
例題3 求矩陣的最大元素及其對應位置。
解 輸入矩陣D和相應函數

選中并擊“notebook/Evaluate Cell”菜單執行
得到所需的輸出結果

——上兩行是輸入細胞(信息),以下兩行是輸出細胞(微機反饋的計算結果)

這個結果表明D(9)=90是矩陣D的元素最大值。
在Word平臺上使用Matlab的矩陣操作指令,自然有一個信息交換過程。其實我們將Matlab當成了隱蔽的加工廠,在前臺,將制造所需產品的原料或零配件(如引例中輸入的矩陣和所使用的Matlab矩陣操作函數)打包待用(選中),擊“加載項/notebook/Define input Cell”菜單(見圖1)或按快捷鍵“Alt+D”,選中的指令立即變成“綠色”且被一對灰色中括號括住,表示選中部分已被設成了“輸入細胞”,但沒有加工,所以無輸出結果,若要將“輸入細胞”加工成產品——輸出細胞,就擊“notebook/Evaluate Cell”菜單或按快捷鍵“Ctrl+Enter”,輸出細胞將以“藍色”字符顯示。暫時放在加工廠的中間產品其對應輸入細胞后面就用英文字符下分號“;”標明。每次一開工就要運往加工廠加工的零配件,可以選中后擊“加載項/Notebook/Define AutoInit Cell”菜單,將其設成自初始化細胞。
首先,文中列出了Word平臺上矩陣操作的常用函數,從矩陣教學的角度講,這些功能足以將教師從矩陣計算中解脫出來,教師能將更多精力用于矩陣概念和方法的講授上。其次,文中的所有Matlab指令、標點符號等必須在英文字符狀態下輸入,以免出錯或死機。第三,盡管notebook已很好地兼容了Word和Matlab的功能,但Matlab的完整程序語言、交互式操作、動畫和Simulink仿真都不能被調用,這就提醒讀者推廣使用時注意或者直接使用Matlab。
本文盡可能簡單地介紹了關于矩陣處理的幾個基本指令,而涉及高等數學的所有計算、作圖、統計分析等都有對應的Matlab函數,且只要知道其名稱就能象文中一樣自如應用,期待更多人通過這里簡單的使用能重視和推廣工程軟件Matlab在各科教學中工具作用,保持傳統教學觀念的同時兼顧一下新技術手段進課堂的教學嘗試,為所教的學生將進入信息社會做些鋪墊。我們應該承認,各種方法或功能,只要學生知道其存在、實用,學生一定會學習和掌握它,并且探究的信心、推廣的能力可能會大大超出教師的預想。
[1]董霖.MATLAB 使用詳解[M].北京:電子工業出版社,2009:483,32,113-120,1,26,33,42,19.
[2]劉維.精通Matlab與C/C++混合程序設計[M].北京:北京航空航天大學出版社,2012.
[3]薜志涌.精通 Matlab[M].北京:北京航空航天大學出版社,2012:1,40,55.
[4]史榮昌.矩陣分析[M].北京:北京理工大學出版社,1998:142-145.