周琴
【摘要】本文探討了數(shù)學(xué)實驗在線性代數(shù)課程中的應(yīng)用,以逆矩陣為例設(shè)計了實驗內(nèi)容,實驗要求利用MATLAB軟件按照兩種方法計算逆矩陣,并利用hill密碼原理破譯密文.文中給出了實驗步驟,該實驗有利于學(xué)生更深入地掌握理論方法及理解逆矩陣在實際中的應(yīng)用.
【關(guān)鍵詞】逆矩陣MATLAB;數(shù)學(xué)實驗
【基金項目】2017年湖南涉外經(jīng)濟(jì)學(xué)院教學(xué)改革研究項目“數(shù)學(xué)實驗在地方本科院校非數(shù)學(xué)專業(yè)教學(xué)中的應(yīng)用研究”.
一、引言
線性代數(shù)是針對大部分高校專業(yè)學(xué)生開設(shè)的一門數(shù)學(xué)公共類課程,它主要包括行列式、矩陣、線性方程組及相關(guān)運算等內(nèi)容.許多學(xué)生認(rèn)為該課程比較抽象,計算量大,計算時容易出錯.為此,我們考慮將數(shù)學(xué)實驗引入線性代數(shù)教學(xué)中,通過學(xué)生自己動手來探索數(shù)學(xué)規(guī)律,提高學(xué)生的學(xué)習(xí)參與度,有助于學(xué)生更深入地理解和鞏固所學(xué)的數(shù)學(xué)概念和原理.
二、逆矩陣實驗案例
逆矩陣的計算是線性代數(shù)課程的一個重要內(nèi)容,在求解某些線性方程組時也可利用逆矩陣進(jìn)行運算.但因其計算步驟復(fù)雜,計算量大,學(xué)生在筆算時正確率較低.因此,我們以逆矩陣為例設(shè)計了相關(guān)的數(shù)學(xué)實驗,要求學(xué)生在MATLAB軟件下完成該實驗,旨在幫助學(xué)生熟練掌握計算逆矩陣A-1的兩種基本方法,并理解逆矩陣在密碼學(xué)中的應(yīng)用.
實驗要求:設(shè)A=1-32-30111-1,完成以下內(nèi)容:(1)判斷矩陣A是否可逆;(2)利用公式A-1=1|A|A*,求A-1;(3)利用矩陣的初等行變換求A-1;(4)設(shè)A為密鑰矩陣,根據(jù)hill密碼原理將密文gqanhs解密成明文.
關(guān)于矩陣A的可逆性判斷,我們可以用命令det(A)計算A的行列式,若行列式不為0,則可判斷A可逆.關(guān)于逆矩陣的計算,MATLAB中可直接用命令inv(A)來實現(xiàn),但若用現(xiàn)成的命令來做實驗,其最大作用是輔助學(xué)生判斷筆算結(jié)果是否正確,并不利于學(xué)生掌握理論方法.因此,實驗要求中(2)和(3)要求用理論方法進(jìn)行實驗.
利用公式A-1=1|A|A*,A*=(Aij)T,Aij=(-1)i+jMij(Mij為A的元素aij的余子式)筆算逆矩陣時,學(xué)生容易出現(xiàn)幾個誤區(qū):一是計算代數(shù)余子式Aij時忘記乘符號(-1)i+j,二是計算伴隨矩陣A*時沒有將Aij轉(zhuǎn)置,三是部分學(xué)生用|A|A*來計算A-1.如果學(xué)生平時筆算時易犯這些錯誤,在進(jìn)行實驗時也會出現(xiàn)相應(yīng)的錯誤.這時我們可將實驗結(jié)果與MATLAB自帶的函數(shù)執(zhí)行結(jié)果做對比來發(fā)現(xiàn)錯誤.比如,將實驗過程中產(chǎn)生的A*結(jié)果與執(zhí)行命令det(A)*inv(A)的結(jié)果對比,最后產(chǎn)生的A-1的結(jié)果與執(zhí)行命令inv(A)的結(jié)果對比.通過該實驗?zāi)軓?qiáng)化學(xué)生對計算步驟中每個細(xì)節(jié)的掌握,從而減少筆算的錯誤.實現(xiàn)此過程的代碼如下:
A=[1-3 2;-3 0 1;1 1-1];
fori=1:3
for j=1:3
C=A;
C(:,[i])=[];%刪除i行
C([j],:)=[];%刪除j列
A1(i,j)=(-1)^(i+j)*det(C);
end
end
Astar=A1′%A*
invA=Astar′/det(A)%逆
初等行變換方法利用(A|E)→(E|A-1)計算逆矩陣.在生成矩陣AE=(A|E)后,直接用命令rref(AE)可得到(E|A-1)的形式,從而求出逆.為了強(qiáng)化學(xué)生對計算步驟的掌握,實驗過程要求學(xué)生按筆算步驟編程.以下代碼的作用是將矩陣AE中元素按AE21,AE31,AE32,AE12,AE13,AE23的順序逐一化0,再將AE22,AE33元素化1,從而將AE化為(E|A-1)的形式,最后取其4至6列即A-1.實現(xiàn)此過程的代碼如下:
A=[1-3 2;-3 0 1;1 1-1];
E=eye(3,3);
AE(:,1:3)=A;
AE(:,4:6)=E;
EA=rref(AE)
AE(2,:)=AE(2,:)-AE(1,:)*AE(2,1)/AE(1,1);
AE(3,:)=AE(3,:)-AE(1,:)*AE(3,1)/AE(1,1);
AE(3,:)=AE(3,:)-AE(2,:)*AE(3,2)/AE(2,2);
AE(1,:)=AE(1,:)-AE(2,:)*AE(1,2)/AE(2,2);
AE(1,:)=AE(1,:)-AE(3,:)*AE(1,3)/AE(3,3);
AE(2,:)=AE(2,:)-AE(3,:)*AE(2,3)/AE(3,3);
AE(2,:)=AE(2,:)/AE(2,2);
AE(3,:)=AE(3,:)/AE(3,3);
invA=AE(:,4:6)
若去除代碼中每行結(jié)尾分號再運行即可在MATLAB命令行窗口顯示每步的結(jié)果.
該結(jié)果也可與命令rref(AE)的結(jié)果對比判斷正確與否.此代碼便于學(xué)生判斷筆算時每一步是否正確,若需計算四階及四階以上矩陣的逆可仿此進(jìn)行.以上兩段代碼執(zhí)行后在MATLAB命令行窗口將得到結(jié)果A-1=113237349.
實驗要求(4)中,希爾密碼的基本思想是:將英文字母a—z用模26的數(shù)字1—26代替,26即0,對于密鑰矩陣An×n,將英文明文對應(yīng)數(shù)字構(gòu)造相應(yīng)的行數(shù)為n的矩陣X,令Y=AX,將Y中數(shù)字轉(zhuǎn)變?yōu)樽帜?,即相?yīng)的密文.若已知密文求明文,利用X=A-1Y即可.已知密鑰矩陣為3階方陣,即n=3,密文gqanhs,對應(yīng)為矩陣即Y=714178119,利用MATLAB語句Y=[7 14;17 8;1 19];X=inv(A)*Y即可輸出X=27729879185245,再利用語句mod(X,26)將X的元素在模26下轉(zhuǎn)化為0—26之間的數(shù)字即X=120201311,再將數(shù)字對應(yīng)字母得到明文attack.該實驗內(nèi)容的設(shè)置將抽象的知識點與實際問題聯(lián)系起來,有利于學(xué)生了解逆矩陣在實際中的應(yīng)用,提高學(xué)生學(xué)習(xí)興趣.
綜上所述,借助MATLAB軟件我們完成了逆矩陣相關(guān)的實驗,包括逆矩陣的兩種計算方法及其在密碼學(xué)中的應(yīng)用.線性代數(shù)課程的其他知識點也可設(shè)計相應(yīng)的實驗案例,幫助學(xué)生更深入地理解和掌握理論方法,在實驗的過程中動手動腦能力也能得到提升.
【參考文獻(xiàn)】
[1]李建平,全志勇.線性代數(shù)(修訂版)[M].上海:復(fù)旦大學(xué)出版社,2009.
[2]劉衛(wèi)國.MATLAB程序設(shè)計教程:第2版[M].北京:中國水利水電出版社,2010.