大學的時候上過線性代數,研究所學生的時候上過矩陣論,但是現在用起相關的知識來還是很不順手,感覺是還沒有入門。因為矩陣是到大學才學的東西,以前沒有接觸過,我覺得思考矩陣的方式和以前的數學有很大的差別。我也一直在想為什麼對矩陣總不能開竅,我想了想,可能是我這矩陣的自學的。因為實在是不喜歡大學的矩陣老師,是以基本上沒有上,等到考研的時候才重新自學,而且到考研前幾天還一片茫然,不知所雲,但是我考研數學得分最多就是矩陣部分。世界上有些東西就是很出人意料,不過意料之外,情理之中,因為考試那幾個題我以前都做過,我貌似也就會這些題(
偷笑~),這得感謝考研數學的那本神書啊,寫矩陣部分的人貌似叫李永樂,不知道他現在還神不神啊,嘻嘻。。。
言歸正傳,最近在看麻省理工的線性代數課程。剛看到第二節課程,但是我已經發現了我思考矩陣問題上的一個局限,那就是我從來沒有從全局的方式來思考,也就是隻注重每個數字,而沒有将矩陣看成一個整體。或許這就是我矩陣總不靈光的根源吧。
下面就記錄一下我的點點收獲,關于矩陣乘法。
首先,線性代數課從是從我們最熟悉的線性方程組開始:
a11*x+a12*y+a13*z=b1
a21*x+a22*y+a23*z=b2
a31*x+a32*y+a33*z=b3
然後這個方程組可以這樣表示:
Ax=b
然後是矩陣乘法。學過矩陣的人都知道矩陣乘法的公式,一行和一列對應的元素相乘得到一個結果加入結果矩陣的特定位置,這個就不說了。但是在MIT的現代課上,教授提出另外一種思路。比如,Ax=b 可以從線性組合的角度來思考。
A=[a1,a2,a3,...] a1,a2,a3都是列向量。那麼Ax其實是A的列向量的線性組合:Ax=x1*a1+x2*a2+x3*a3...注意,x1,x2,x3是數字,a1,a2是列向量。
照此思路:
xA=[x1,x2,x3,...][a1;a2;a3...]=x1*a1+x2*a2+x3*a3+...
其中a1,a2是行向量,也就是說把A按照行來分塊
想AB=C這種矩陣乘法也可以按照這種思路,一行一行的算或是一列一列的算,而不是一個一個算。
方法一:将B按照列來分塊
AB=A[b1,b2,b3]=[Ab1,Ab2,Ab3],然後又到了上面Ax=b的模式了。
這種解法給了我們一種新的了解C 的方式,那就是,C中的某列是A中的列向量的線性組合,系數就是B中相應的列。
方法二:将A按照行來分塊
AB=[a1;a2;a3]B=[a1B;a2B;a3B],然後又到了xA的模式了。
上面已經講到了三種矩陣乘法的方法,A列*B行,A列的線性組合,B行的線性組合,下面還有兩種求矩陣乘積。
A的列向量*B的行向量,然後所有的矩陣求和
求矩陣的成績的最經典的算法是A的第i行向量乘以B的第j列向量得到結果矩陣中的Cij。麻省理工的那個線性代數提出了一個新的方法,就是用A的列乘以B的行。其實,可以相出來m-by-n的矩陣A的列向量是m-by-1的,n-by-p的B矩陣的行向量是1-by-p的,兩個向量相成的結果是m-by-p維的矩陣,次元和C的相等。是以,C應該可以通過A的各個列與B的對應行相乘得到的結果矩陣相加。的确是這樣的。
A=[1 2
3 4]
B=[5 6
7 8]
A*B=[1;3]*[5 6]+[2;4]*[7 8]=[5 6;15 18]+[14 16;28 32]=[19 22;43 50]
其實一個n-by-1向量乘以一個1-by-m的向量是很好求的,因為得到的這些矩陣的的秩都是為1的。
如[1;3]*[5 6]=[5 6;3*5 3*6] 或是這麼寫
[1*5 1*6
3*5 3*6]
還有一個求矩陣乘法的方法是先分塊,再相乘。