呂洪升
(巢湖學(xué)院,安徽 巢湖 238000)
數(shù)學(xué)教學(xué)中,數(shù)據(jù)處理、繪圖等費(fèi)時(shí)費(fèi)力,且無論用PowerPoint還是Word設(shè)計(jì)教案,所插入的數(shù)學(xué)公式不能與其它文字統(tǒng)一處理,必須單獨(dú)編輯,就這一點(diǎn),教師備課就得花不少無謂時(shí)間,何況數(shù)學(xué)公式軟件只能編輯公式而不能實(shí)現(xiàn)數(shù)據(jù)分析或計(jì)算呢。為化解這個(gè)矛盾,本人在概率統(tǒng)計(jì)和離散數(shù)學(xué)教學(xué)中引入工程軟件Matlab作為后臺(tái)工具,在PowerPoint或Word界面上無縫隙鏈接Matlab的強(qiáng)大數(shù)據(jù)處理、繪圖和簡單模擬等功能[1],而不用考慮學(xué)生是否具備Matlab程序設(shè)計(jì)語言的基礎(chǔ),也不用刻意補(bǔ)充講授該語言的各種規(guī)定和程序設(shè)計(jì)的語法體系,取得了良好的教學(xué)效果。作為教學(xué)經(jīng)驗(yàn)總結(jié)或教學(xué)研究,這里試圖將Matlab作為矩陣教學(xué)的后臺(tái)工具,仍在Microsoft-Word平臺(tái)上介紹矩陣的各種操作,以提高高等代數(shù)課堂教與學(xué)的興趣和教學(xué)效果。
求一個(gè)已知矩陣A(在解題中給出)的行列式、逆矩陣B、特征值D和特征向量V。
解 (只需兩步:輸入、選擇執(zhí)行 )。
第一步:輸入
第二步:選擇執(zhí)行(圖1)
結(jié)果如下:
圖1
1.2.1 錄入數(shù)據(jù)和指令:(1)輸入矩陣 A,所有元素必須放在矩陣標(biāo)識(shí)符——中括號(hào) “[]”內(nèi),逗號(hào)“,”或空格”分隔矩陣列,分號(hào)“;”或回車鍵“”分隔矩陣的行[1];(2)輸入求矩陣行列式函數(shù)“det”、求逆矩陣函數(shù)“inv”和特征值、特征向量函數(shù)“eig”[1]。
1.2.2 執(zhí)行計(jì)算: 選中輸入的四行字符,擊“加載項(xiàng)/notebook/Evaluate Cell”菜單(見圖1),選中文字立刻變成綠色,計(jì)算結(jié)果以藍(lán)色字符顯示。
1.2.3 結(jié)果顯示的一般規(guī)律:執(zhí)行指令后,若有結(jié)果輸出,一般依次顯示在選中行的下方。命令行左邊若有字母和賦值號(hào)“=”,結(jié)果就賦給該命令左邊的字母(如第三行的逆矩陣B),若左邊沒有任何符號(hào),結(jié)果一律用“ans”表示(如第二行的行列式值12);要不想顯示某個(gè)指令的輸出結(jié)果,就在該指令行后面加“;”且與該行一并選中[1](如第一行的矩陣A)。第四行的“eig”函數(shù)有些特別,它同時(shí)求得矩陣特征向量、特征值,并分別用V和D表示。
1.2.4 解題分析:通常情況下,即使矩陣 A不太復(fù)雜,課堂上動(dòng)態(tài)解答這一結(jié)果也是不太容易的,而在引例環(huán)境下,只要熟悉三個(gè)指令,輸入四行,選擇一下希望輸出的結(jié)果,計(jì)算機(jī)就會(huì)現(xiàn)場(chǎng)給出答案,而且輸入的公式或輸出的數(shù)字符號(hào)等可與其它文字統(tǒng)一編輯,大大方便了數(shù)學(xué)教案的個(gè)性化編排。再看解題結(jié)果,輸入的四行數(shù)據(jù)都變成了綠色,且被一對(duì)灰色中括號(hào)括住,這就是Word中能與Matlab接口并可被其執(zhí)行的指令,稱為輸入細(xì)胞;第二、三、四行執(zhí)行結(jié)果被以藍(lán)色字符顯示,是系統(tǒng)執(zhí)行該輸入細(xì)胞的結(jié)果,稱為輸出細(xì)胞,第一行A因?yàn)楹竺娴摹?;”而不顯示。
1.2.5 運(yùn)行平臺(tái)剖析:這是一個(gè)Word平臺(tái)上的矩陣操作實(shí)例,是在工程軟件Matlab打開的前提下,利用兼Word文字處理和工程計(jì)算功能為一體的notebook核心模板M-book界面,從后臺(tái)調(diào)用了Matlab的函數(shù)或命令,前臺(tái)卻完全看不到,學(xué)生感到只要熟悉幾個(gè)功能函數(shù)或命令就能得到想要的計(jì)算結(jié)果,這種拿來即用的簡單工具師生都會(huì)喜歡,無論直接用于數(shù)學(xué)教學(xué)還是作為數(shù)學(xué)驗(yàn)證,都是難得的好幫手。不論概率統(tǒng)計(jì)、離散數(shù)學(xué)還是微積分中繪圖、求導(dǎo)、求積分和解微分方程等,都有對(duì)應(yīng)取之即用的簡單指令,對(duì)數(shù)學(xué)教師而言,最實(shí)用的可能是符號(hào)運(yùn)算。而在信息科學(xué)和自動(dòng)控制領(lǐng)域或教學(xué)中,該軟件更有用武之地。
從上面引例看到,我們的操作界面就是微軟的文字處理軟件Word,對(duì)現(xiàn)在任何一個(gè)大學(xué)生,使用都不會(huì)有問題。如何配置,也易如反掌,但我們的目的是在不增加學(xué)生學(xué)習(xí)負(fù)擔(dān)的前提下使用Matlab的簡單函數(shù)和基本命令,久而久之,學(xué)生不僅感覺方便、有趣且離不開,而這種解釋式、能集Fortran、Pascal、C語言等于一體的第四代程序設(shè)計(jì)語言[2]很簡單,易于掌握且功能特別強(qiáng)大,有數(shù)學(xué)教學(xué)中使用的基礎(chǔ),學(xué)生一定會(huì)無師自通的。
下面簡述如何配置計(jì)算機(jī)并進(jìn)入引例的環(huán)境。
2.1 Matlab的安裝和運(yùn)行。早期的Matlab,由于容量大,安裝費(fèi)時(shí)費(fèi)力,很不容易,現(xiàn)在有綠色便攜版或云軟件系統(tǒng) (百度一下就有許多資源),只要下載到U盤中,在任一部裝有Windows XP或Windows 7操作系統(tǒng)的PC機(jī)上就能即插即用,不用安裝,非常方便,當(dāng)然在Unix平臺(tái)上使用也簡單,不需贅述。
2.2 notebook安裝。本機(jī)使用的操作系統(tǒng)是Windows 7,且假定已安裝了Microsoft Word2007(Windows和Word其它版本操作類似)。首先運(yùn)行Matlab軟件,在其命令窗口輸入notebooksetup回車 (這里要注意notebook與后面 “-setup”的減號(hào)之間要空一格,否則系統(tǒng)報(bào)錯(cuò),安裝失敗),在歡迎界面中鍵入Microsoft Word2007前面的數(shù)字5(圖略),就完成了安裝。
2.3 notebook啟動(dòng),無論在Matlab還是在Word2007環(huán)境下,都有多種啟動(dòng)方法。
在Matlab命令窗口,鍵入notebook,回車,新M-book模板文檔即可供編輯,操作的窗口就是我們常見的Word2007界面;
若先打開Word,擊“新建/我的模板/M-book.dot”文檔(見圖2),擊“確定”按鍵即進(jìn)入空文檔編輯狀態(tài)。
圖2
編輯或打開已有文檔與Word通常操作完全一樣。
學(xué)生沒有Matlab基礎(chǔ),教師在課堂上直接使用Matlab簡單函數(shù)處理數(shù)學(xué)教學(xué)中的數(shù)據(jù)問題,為引導(dǎo)學(xué)生逐漸熟悉和掌握Matlab部分功能,除課堂使用中自然介紹Matlab常用命令或函數(shù)的基本功能和調(diào)用格式外,還要講述在M-book中輸入的函數(shù)如何被執(zhí)行,執(zhí)行結(jié)果又以什么格式顯示和如何被調(diào)用等,以下逐一說明。
3.1.1 常規(guī)運(yùn)算符號(hào)。Matlab以矩陣為基本操作元素,所以矩陣的加(+)、減(-)、乘(*)、乘方(^)、轉(zhuǎn)置(' )(當(dāng)然還有左除、右除和按位乘、除等,有興趣者請(qǐng)查看相關(guān)資料)象小學(xué)算術(shù)里四則運(yùn)算一樣簡單好用,輸入格式就是英文字符環(huán)境下普通Word文本格式。
3.1.2 特殊矩陣生成。普通矩陣的生成方法如引例的第一行A,但一些特殊矩陣有專門的函數(shù)生成,如ones、zeros、eye分別生成單位矩陣、全0 和全 1 矩陣[1],magic、rand(randn)、diag、compan分別生成魔方矩陣、隨機(jī)矩陣、對(duì)角矩陣和伴隨矩陣。線性代數(shù)中常用的Pascal、范德蒙矩陣可用函數(shù)Pascal和vander生成[1],想了解更多或每個(gè)函數(shù)的詳細(xì)用法,可借助“help”命令尋求幫助,輸入 “help vander”后回車,屏幕即顯示范德蒙函數(shù)的使用信息(如下文的幫助文字),想知道m(xù)agic 的詳情,只要將“help vander”后面的“vander”用“magic”替代即可,如法炮制,可查詢?nèi)魏魏瘮?shù)的使用詳情。
綠色文字“help vander”是輸入細(xì)胞——用戶請(qǐng)求信息,其后藍(lán)色的輸出細(xì)胞——計(jì)算機(jī)反饋給用戶的幫助文字只保留了一部分,不僅顯示范德蒙函數(shù)的用法,還給出了范德蒙矩陣的定義。
例題1 創(chuàng)建3階均勻分布、正態(tài)分布隨機(jī)矩陣和5階范德蒙矩陣。
解 輸入對(duì)應(yīng)的三個(gè)生成函數(shù) (每個(gè)函數(shù)一行),其它操作同引例,結(jié)果如下:
從輸出結(jié)果可知矩陣生成函數(shù)的用法(其它函數(shù)類似),矩陣A是一個(gè)[0,1]上均勻分布的3階隨機(jī)矩陣,因?yàn)樾心┪灿小?;”未顯示,B是3階標(biāo)準(zhǔn)正態(tài)分布隨機(jī)矩陣,C是所需的5階范德蒙矩陣,這里要注意第 3 行函數(shù) vander(1:5)括號(hào)內(nèi)的不同形式。
至此,引例中矩陣A、B已被重新賦值。一般情況下,只要本機(jī)不重新啟動(dòng)且A、B沒有被重新賦值,A、B的數(shù)據(jù)保持不變,且隨時(shí)隨處可調(diào)用。
例題2 求矩陣A與B的積M。
解 輸入計(jì)算公式M=A*B,再設(shè)其為有結(jié)果輸出的輸入細(xì)胞(同引例)。結(jié)果如下:
顯然計(jì)算結(jié)果是例題1中兩個(gè)3階隨機(jī)矩陣的積。
若微機(jī)重啟后(或下次課)仍需使用以前數(shù)據(jù)矩陣A、B時(shí),只要將原始錄入數(shù)據(jù)對(duì)應(yīng)的行(最好行后加“;”)選中后,設(shè)為有結(jié)果輸出的輸入細(xì)胞(擊“/notebook/Evaluate Cell”菜單,見圖1)即可,不需重新輸入矩陣A、B。但要注意,若將例題1中三行如是執(zhí)行后,矩陣A、B已不一樣,因?yàn)殡S機(jī)函數(shù)每次生成的矩陣都不相同[3],除非設(shè)置重現(xiàn),矩陣C保持不變。
如果希望一個(gè)矩陣每次課都能直接調(diào)用,就在輸入時(shí)定義其為自初始化細(xì)胞且永不被重新賦值。
3.1.3 常用的矩陣函數(shù)。除引例中介紹的求方陣的行列式、逆矩陣、特征值和特征向量函數(shù)外,rank可求矩陣的秩;其實(shí)引例中eig(A)是可對(duì)角化方陣A的特征分解函數(shù),當(dāng)A不可對(duì)角化(特征向量線性相關(guān))時(shí)可用Schur(A)對(duì)A作科利分解,稍微推廣,還有針對(duì)正定矩陣的Cholesky分解和一般矩陣的LU分解、QR分解、SVD分解[4],分解名即函數(shù)名,使用與特征分解一樣,都非常方便。另外,兩個(gè)矩陣拼接函數(shù)也很實(shí)用,horzcat(A,B)是將兩個(gè)同行矩陣A、B水平合并成一個(gè)大矩陣,而函數(shù) vertcat(A,B)能將兩個(gè)同列矩陣A、B垂直合并成一個(gè)矩陣。例如,判斷線性方程組AX=B是否有解,只要用語句K=horzcat(A,B)合并A、B得到增廣矩陣K,再計(jì)算矩陣A、K的秩 rank(A)、rank(K)就知道方程是否相容了。
3.1.4 矩陣信息和矩陣元素尋訪。矩陣最基本的信息是其尺寸,即矩陣維數(shù) (包括高維矩陣)、各維的長度和元素個(gè)數(shù),分別用函數(shù)nidims、numel和size獲取。矩陣元素尋訪有常用的雙下標(biāo)方式和單下標(biāo)方式,雙下標(biāo)命令A(yù)(i,j)很自然讀取矩陣A的第i行第j列元素,如果輸入C(3,2),再選擇執(zhí)行(圖1),立刻得到結(jié)果:
但單下標(biāo)讀取與其它語言不同,Matlab規(guī)定先列后行[3],如果我們用C(:)將矩陣C轉(zhuǎn)換成一個(gè)列向量(第二列接在第一列后面,第三列接在第二列后面……,依次類推),就知道矩陣C雙下標(biāo)元素 C(3,2)對(duì)應(yīng)單下標(biāo)元素 C(8)了。一般地,若A是一個(gè)m×n矩陣,則A的雙下標(biāo)元素A(i,j)對(duì)應(yīng)其單下標(biāo)元素是 A[m×(j-1)+i],反過來也容易推算。另外,函數(shù)max(或min)可以找出矩陣每一列的最大值(最小值),很自然,max(max(A)(或 min(min(A))能求出整個(gè)矩陣的最大值(或最小值),而[MaxValue,MaxIndex]=max(A(:))還能輕松獲得A的最大值和最大值單下標(biāo)索引號(hào)。
例題3 求矩陣的最大元素及其對(duì)應(yīng)位置。
解 輸入矩陣D和相應(yīng)函數(shù)
選中并擊“notebook/Evaluate Cell”菜單執(zhí)行
得到所需的輸出結(jié)果
——上兩行是輸入細(xì)胞(信息),以下兩行是輸出細(xì)胞(微機(jī)反饋的計(jì)算結(jié)果)
這個(gè)結(jié)果表明D(9)=90是矩陣D的元素最大值。
在Word平臺(tái)上使用Matlab的矩陣操作指令,自然有一個(gè)信息交換過程。其實(shí)我們將Matlab當(dāng)成了隱蔽的加工廠,在前臺(tái),將制造所需產(chǎn)品的原料或零配件(如引例中輸入的矩陣和所使用的Matlab矩陣操作函數(shù))打包待用(選中),擊“加載項(xiàng)/notebook/Define input Cell”菜單(見圖1)或按快捷鍵“Alt+D”,選中的指令立即變成“綠色”且被一對(duì)灰色中括號(hào)括住,表示選中部分已被設(shè)成了“輸入細(xì)胞”,但沒有加工,所以無輸出結(jié)果,若要將“輸入細(xì)胞”加工成產(chǎn)品——輸出細(xì)胞,就擊“notebook/Evaluate Cell”菜單或按快捷鍵“Ctrl+Enter”,輸出細(xì)胞將以“藍(lán)色”字符顯示。暫時(shí)放在加工廠的中間產(chǎn)品其對(duì)應(yīng)輸入細(xì)胞后面就用英文字符下分號(hào)“;”標(biāo)明。每次一開工就要運(yùn)往加工廠加工的零配件,可以選中后擊“加載項(xiàng)/Notebook/Define AutoInit Cell”菜單,將其設(shè)成自初始化細(xì)胞。
首先,文中列出了Word平臺(tái)上矩陣操作的常用函數(shù),從矩陣教學(xué)的角度講,這些功能足以將教師從矩陣計(jì)算中解脫出來,教師能將更多精力用于矩陣概念和方法的講授上。其次,文中的所有Matlab指令、標(biāo)點(diǎn)符號(hào)等必須在英文字符狀態(tài)下輸入,以免出錯(cuò)或死機(jī)。第三,盡管notebook已很好地兼容了Word和Matlab的功能,但Matlab的完整程序語言、交互式操作、動(dòng)畫和Simulink仿真都不能被調(diào)用,這就提醒讀者推廣使用時(shí)注意或者直接使用Matlab。
本文盡可能簡單地介紹了關(guān)于矩陣處理的幾個(gè)基本指令,而涉及高等數(shù)學(xué)的所有計(jì)算、作圖、統(tǒng)計(jì)分析等都有對(duì)應(yīng)的Matlab函數(shù),且只要知道其名稱就能象文中一樣自如應(yīng)用,期待更多人通過這里簡單的使用能重視和推廣工程軟件Matlab在各科教學(xué)中工具作用,保持傳統(tǒng)教學(xué)觀念的同時(shí)兼顧一下新技術(shù)手段進(jìn)課堂的教學(xué)嘗試,為所教的學(xué)生將進(jìn)入信息社會(huì)做些鋪墊。我們應(yīng)該承認(rèn),各種方法或功能,只要學(xué)生知道其存在、實(shí)用,學(xué)生一定會(huì)學(xué)習(xí)和掌握它,并且探究的信心、推廣的能力可能會(huì)大大超出教師的預(yù)想。
[1]董霖.MATLAB 使用詳解[M].北京:電子工業(yè)出版社,2009:483,32,113-120,1,26,33,42,19.
[2]劉維.精通Matlab與C/C++混合程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2012.
[3]薜志涌.精通 Matlab[M].北京:北京航空航天大學(xué)出版社,2012:1,40,55.
[4]史榮昌.矩陣分析[M].北京:北京理工大學(xué)出版社,1998:142-145.