Matrix Computations-4nd Edition---Chapter 1. Matrix Multiplication

最近感到数学太渣,想慢慢地捡起,从矩阵计算开始,买了一本书:Matrix Computations-4th edition, Gene H. Golub, Charles F. Van Loan


,将学习中的体会记录到这里(主要是比较模糊的知识点),目录见下图:





今天学习第1章

Chapter 1. Matrix Multiplication

        这一章的题目虽然是matrix multiplication,但是其中涉及到了加减乘除运算。

1:

   


这里x与y均为n维的列向量(column vector),a是标量(scalar),y=ax+y其实就是一般的更新操作,即用ax+y的值来覆盖之前的y,这里的saxpy代表scalar a x plus y,即标量a乘以x再加上y,此称呼来自于LAPACK,是一个线性代数的计算库,有一本专门介绍这个的书:LAPACK Users' Guide

2:当将saxpy中的标量a换为矩阵时,即y=y+Ax,称为generalized saxpy operation,即gaxpy,标准的计算方法是逐次的更新y:

这里有2种计算方式:(1)


即逐次访问A的每一行的每一列(内循环是列)。

(2)按列


即逐次访问A的每一列的每一行(内循环是行)。

之所以会得出(2),是因为可以将Ax看作A的列的线性组合,即:


3:可以将矩阵分别看作是一系列的行向量的累叠


一个具体的例子是:


有了这种记法之后,算法1.1.3就可以更加简洁:

,其实计算的东西一样,只不过是将矩阵A表示为r_i的累叠。

同样的,A也表示为列向量的集合:


这样,算法1.1.4也可以写为:


注意这两种表示方法中的x的先后次序是不同的。

4:A(k,:)与A(:,k)分别表示矩阵A的第k行与第k列,这样一来,算法1.1.3与1.1.4进一步又可以写为:


5:outer product undate:


这里x是m维列向量,y为n维为列向量,则xy^T为m*n的矩阵,比如:


但是,如果是(y^T)*x或者(x^T)*y,则为一个数,(R^(m*n)) * (R^(n*k))==R^(m*k)。


此式的直接计算表达为:


计算复杂度为O(mn),考虑到内循环的作用是将矩阵的第i行加上y^T的x(i)倍,算法可以简写为:


同样地,可以表示为列的表达式:


6:





posted @ 2014-11-01 13:47  DeepVL  阅读(713)  评论(0编辑  收藏  举报