关于线性代数的一点点心得
本科的时候上过线性代数,研究生的时候上过矩阵论,但是现在用起相关的知识来还是很不顺手,感觉是还没有入门。因为矩阵是到大学才学的东西,以前没有接触过,我觉得思考矩阵的方式和以前的数学有很大的区别。我也一直在想为什么对矩阵总不能开窍,我想了想,可能是我这矩阵的自学的。因为实在是不喜欢本科的矩阵老师,所以基本上没有上,等到考研的时候才重新自学,而且到考研前几天还一片茫然,不知所云,但是我考研数学得分最多就是矩阵部分。世界上有些东西就是很出人意料,不过意料之外,情理之中,因为考试那几个题我以前都做过,我貌似也就会这些题(偷笑~),这得感谢考研数学的那本神书啊,写矩阵部分的人貌似叫李永乐,不知道他现在还神不神啊,嘻嘻。。。
言归正传,最近在看麻省理工的线性代数课程。刚看到第二节课程,但是我已经发现了我思考矩阵问题上的一个局限,那就是我从来没有从全局的方式来思考,也就是只注重每个数字,而没有将矩阵看成一个整体。或许这就是我矩阵总不灵光的根源吧。
下面就记录一下我的点点收获,关于矩阵乘法。
首先,线性代数课从是从我们最熟悉的线性方程组开始:
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]
还有一个求矩阵乘法的方法是先分块,再相乘。