侯娟
(江蘇南京曉莊學院附屬中學)
連線法巧解二維矩陣轉(zhuǎn)換
侯娟
(江蘇南京曉莊學院附屬中學)
二維矩陣轉(zhuǎn)換是C語言數(shù)組應用的重要組成部分,特別是行列互換。嘗試了一種新的方法,試圖降低矩陣轉(zhuǎn)換的難度。教學效果表明,新方法對學生學習二維矩陣的轉(zhuǎn)換有一定的幫助。
C語言;數(shù)組;矩陣轉(zhuǎn)換
數(shù)組的應用除了排序之外,還經(jīng)常用在二維矩陣的轉(zhuǎn)換上。但是對于如何正確地轉(zhuǎn)換二維矩陣,卻很少有教材專門闡述。在C語言的教學中如何層次清晰、變抽象為具體地將二維矩陣的轉(zhuǎn)換方法教授給學生,值得我們深思。
二維矩陣轉(zhuǎn)換的類型根據(jù)旋轉(zhuǎn)時行列的關(guān)系主要分為兩大類:90度旋轉(zhuǎn)和180度旋轉(zhuǎn)。這兩種又可以進一步劃分出順時針和逆時針兩種。90度轉(zhuǎn)換涉及旋轉(zhuǎn)后的行i后與旋轉(zhuǎn)前列j前的關(guān)系,以及旋轉(zhuǎn)后的列j后和旋轉(zhuǎn)前的行i前的關(guān)系。而180度旋轉(zhuǎn)則是旋轉(zhuǎn)后的行i后與旋轉(zhuǎn)前的行i前的關(guān)系,以及旋轉(zhuǎn)后的列j后與旋轉(zhuǎn)前的列j前的關(guān)系。
1.連線法簡述
連線法就是將矩陣旋轉(zhuǎn)前后的行列關(guān)系用線連起來,在此基礎上得出i后與j前或i前的關(guān)系表達式,以及j后與i前或j前的關(guān)系表達式,然后根據(jù)表達式確定內(nèi)外循環(huán)的行列數(shù),并實行矩陣轉(zhuǎn)換。
2.連線法解題步驟
(1)畫出旋轉(zhuǎn)前的矩陣圖和旋轉(zhuǎn)后的矩陣圖。(2)分別標出行列號。(3)根據(jù)矩陣的內(nèi)容用連線的方法找出旋轉(zhuǎn)前后的行列關(guān)系。(4)并列出關(guān)系表達式。(5)根據(jù)表達式等號右邊的對象確定內(nèi)外循環(huán)的行列數(shù)。(6)寫矩陣轉(zhuǎn)換的表達式。
概括起來講即:一畫,二標,三連線,四列表達式,五定行列數(shù),六轉(zhuǎn)換。
有一個整形的二維矩陣,請將其順時針旋轉(zhuǎn)90度后輸出,如圖1。
圖1
圖2 旋轉(zhuǎn)前矩陣圖
圖3 旋轉(zhuǎn)后矩陣圖
文章后面所用到的i,j為整型變量,數(shù)組a[3][4]和數(shù)組b[4][3]也為整型數(shù)組。
1.一畫——畫出旋轉(zhuǎn)前的矩陣圖和旋轉(zhuǎn)后的矩陣圖。
2.二標——分別標出旋轉(zhuǎn)前后的行列號,如如圖2和3。
3.三連線——根據(jù)矩陣的內(nèi)容用連線的方法找出旋轉(zhuǎn)前后的行列關(guān)系。
這里的根據(jù)矩陣內(nèi)容主要是選擇確定旋轉(zhuǎn)前后的矩陣中的元素,目的是分析其旋轉(zhuǎn)前后的行列關(guān)系。在以前的教學中筆者都是讓學生隨意選擇矩陣中的元素,主要是強調(diào)通用性,但是這樣做帶來很多麻煩,特別容易出錯。為此在連線法中筆者選擇旋轉(zhuǎn)后矩陣的0行0列元素作為尋找旋轉(zhuǎn)前后矩陣行列關(guān)系的依據(jù)。另外對于90度旋轉(zhuǎn)的題目,我們知道矩陣旋轉(zhuǎn)前的行列數(shù)目發(fā)生了變化,旋轉(zhuǎn)后的行i后與旋轉(zhuǎn)前列j前的關(guān)系,以及旋轉(zhuǎn)后的列j后和旋轉(zhuǎn)前的行i前的關(guān)系。
具體過程:
(1)找出0列上的元素i后與j前的值,并連線
元素31:i后=0,j前=0;元素32:i后=1,j前=1;
元素33:i后=2,j前=2;元素34:i后=3,j前=3;
(2)找出0行上的元素j后與i前的值,并連線
元素31:j后=0,i前=2;元素21:j后=1,i前=1;元素11:j后=2,i前=0;旋轉(zhuǎn)后矩陣圖
圖4
4.列出關(guān)系表達式。
5.五定行列數(shù)——根據(jù)表達式等號右邊的對象確定轉(zhuǎn)換時內(nèi)外循環(huán)的行列數(shù)。
在1式中等號右邊是關(guān)于矩陣旋轉(zhuǎn)前的式子,因此使用旋轉(zhuǎn)前矩陣的行列值,即三行四列:for(i=0;i<3;i++)
for(j=0;j<4;j++)
在2式中等號右邊是關(guān)于矩陣旋轉(zhuǎn)后的式子,因此使用旋轉(zhuǎn)后矩陣的行列值,即四行三列:for(i=0;i<4;i++)
for(j=0;j<3;j++)
6.寫矩陣轉(zhuǎn)換的表達式。
使用1式和2式不僅影響轉(zhuǎn)換時內(nèi)外循環(huán)的行列數(shù),還直接影響到矩陣轉(zhuǎn)換的表達式。
(1)使用等式1的情況
如使用1式,首先要使用1式轉(zhuǎn)換時內(nèi)外循環(huán)的行列數(shù);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
其次還需注意矩陣轉(zhuǎn)換表達式左邊必須寫成b[j][i]的形式,而右邊主要是把數(shù)組a中的a[j后的值代入][i后的值代入]]元素賦值給b[j][i],即b[j][i]=a[j前][2-i前],最后將下標去掉即可。
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[j][2-i];
(2)使用等式2的情況
如使用2式,首先要使用2式轉(zhuǎn)換時內(nèi)外循環(huán)的行列數(shù);
for(i=0;i<4;i++)
for(j=0;j<3;j++)
其次還需注意矩陣轉(zhuǎn)換表達式左邊必須寫成b[i][j]的形式,而右邊主要是把數(shù)組a中的a[i前的值代入][j前的值代入]]元素賦值給b[i][j],即b[j][i]=a[2-j后][i后],最后將下標去掉即可。
for(i=0;i<4;i++)
for(j=0;j<3;j++)
b[i][j]=a[2-j][i];
連線雖然是簡單的小步驟,但連線起到的直觀效果是很明顯的,學生通過連線的過程不僅了解了矩陣轉(zhuǎn)換的過程,更有利于總結(jié)和歸納出矩陣轉(zhuǎn)換前后的行列關(guān)系,而且根據(jù)表達式等號右邊的對象可以確定循環(huán)的行列數(shù),這對于后期的編程非常有幫助。
[1]馬志大.矩陣的行列調(diào)整與矩陣方程的求解[J].北京市經(jīng)濟管理干部學院學報,2004.
[2]楊林發(fā).緊扣內(nèi)存變量關(guān)系巧解矩陣類問題[J].電腦編程技巧與維護,2012.
·編輯段麗君