精华内容
下载资源
问答
  • 李雅普诺夫稳定性理论

    万次阅读 多人点赞 2016-11-10 19:23:13
    1892年,俄国学者李雅普诺夫提出的稳定性定理采用了状态向量来描述,适用于单变量,线性,非线性,定常,时变,多变量等系统。目前,李雅普诺夫理论是证明非线性系统稳定性的重要理论依据,也是设计控制算法的重要...

    1892年,俄国学者李雅普诺夫提出的稳定性定理采用了状态向量来描述,适用于单变量,线性,非线性,定常,时变,多变量等系统。

    目前,李雅普诺夫理论是证明非线性系统稳定性的重要理论依据,也是设计控制算法的重要方法之一。

    这里介绍李雅普诺夫直接法(第二法)

    基础知识

    1、二次型定义及其表达式

    形如

    f(x,y)=ax2+2bxy+cy2
    ,每项的次数都是2。矩阵表示为:
    V(x1,x2,,xn)=[x1,x2,,xn]p11,p21,,pn1,p12,p22,,pn2,,,,,p1np2npnnx1x2xn=xTPx

    其中,P 为对称矩阵。

    2、(二次型)V(x) 判据

    (1)、 V(x)正定的充分必要条件是矩阵 P的所有主子式行列式为正。
    (2)、若 P 是奇异矩阵,且它的所有主子式行列式均非负,则 V(x) 为半正定的。
    (3)、如果矩阵 P的奇数阶主子行列式为负值,偶数阶主子行列式为正值,则其为负定的。
    (4)、若 P 正定,则对于任意 x0, 总有 V(x)>0

    3、任意 V(x) 判据

    (1)、则对于任意 x0, 总有 Q(x)=xTQx>0 ,则称 Q(x) 为正定函数。
    (2)、则对于任意 x, 总有 Q(x)=xTQx0 , 且存在 x0 ,使 Q(x)=0,则称 Q(x) 为半 正定函数。
    (3)、若 Q(x) 为(半)正定函数,则 Q(x) 为(半)负定函数

    稳定性定理

    一、稳定性定义

    1、对系统 x˙=f(x,t),若任意给定一个实数 ϵ>0,总存在另一个实数δ(ϵ,t0)>0 ,使当 初始条件 ||xt0)||<δ 时,系统的状态 ||xt||<δtto , 则称系统的平衡状态xs 是稳定的。否则,就是不稳定的。
    2、一致稳定性
    如果系统的平衡状态是稳定的,且 δt0 无关,(若任意给定一个实数 ϵ>0,总存在另一个实数δ(ϵ)>0 ,使当 初始条件 ||xt0)||<δ 时,系统的状态 ||xt||<δtto ),则该平衡状态是一致稳定的。
    若定常系统的平衡状态是稳定的,则一定是一致稳定的。

    3、渐近稳定性
    xe是系统的一个稳定点,对任意 t0,存在正常数
    δ(t0)R+,当 x(t0)<δ, 系统的状态收敛于0,即

    limt||xxe||=0

    则系统是渐进稳定的。

    4、指数稳定性
    对一个系统而言,如果存在正常数 α,λR+,当初始位置在以原点为中心的球域范围内,即 x(t0)Br(o,r) 时,系统的状态x(t)具有以下的包络线:

    ||x(t)||||x(t0)||eλ(tt0)
    ,则称平衡点 xs=0 是指数稳定的,其中正常数 λ 称为指数收敛率。

    二、稳定性定理

    李雅普诺夫第二法是从能量的观点出发得来的。任何物理系统的运动都要消耗能量,并且能量总是大于零的。对于一个不受外部作用的系统,如果系统的能量,随系统的运动和时间的增长而连续地减小,一直到平衡状态为止,则系统的能量将减少到最小,那么这个系统是渐近稳定的。

    1、局部稳定性定理
    x=0是系统的平衡点,如果对于球域 BR,存在一个标量函数 V(x) ,它具有一阶连续偏导数,且满足:
    (1)、函数V(x)在球域BR上是正定的
    (2)、若函数 V(x)关于时间的导数在球域BR 上是半负定的,则平衡点x=0是局部稳定的
    (3)、若函数V(x)关于时间的导数在球域 BR上是负定的,则平衡点 x=0是局部渐近稳定的

    2、全局稳定性定理

    x=0是系统的平衡点,存在一个标量函数 V(x) ,它具有一阶连续偏导数,且满足:
    (1)、函数V(x) 是正定的
    (2)、 V(x) 正则,即当 ||x|| 时, V(x)
    (3)、若函数 V(x)关于时间的导数是半负定的,则平衡点x=0是全局稳定的
    (4)、若函数V(x)关于时间的导数是负定的,则平衡点 x=0是全局渐近稳定的

    3、全局指数稳定性定理
    x=0是系统的平衡点,存在一个标量函数 V(x) ,它具有一阶连续偏导数,且满足:
    (1)、函数V(x) 是正定的
    (2)、 V(x) 正则,即当 ||x|| 时, V(x)
    (3)、若函数 V(x)关于时间的导数是半负定的
    (4)、存在两个正数λ1λ2 ,分别使得

    V(x)λ1||x||2,V˙(x)λ2||x||2

    则平衡点 x=0是全局指数稳定的,指数收敛率为λ1λ2

    展开全文
  • http://blog.csdn.net/pipisorry/article/details/52241141本blog主要内容有:矩阵的奇异、条件数与病态矩阵矩阵求逆。奇异矩阵和非奇异矩阵singular matrix&nonsingular matrix概念和定义若n阶矩阵A的行列式不...

    http://blog.csdn.net/pipisorry/article/details/52241141

    本blog主要内容有:矩阵的奇异性、条件数与病态矩阵、矩阵求逆。

    奇异矩阵和非奇异矩阵singular matrix&nonsingular matrix

    概念和定义

    若n阶矩阵A的行列式不为零,即 |A|≠0,则称A为非奇异矩阵或满秩矩阵,否则称A为奇异矩阵或降秩矩阵。

    奇异矩阵是线性代数的概念,就是对应的行列式等于0的方阵。

    奇异矩阵和非奇异矩阵的判断和性质

    奇异矩阵一定是方阵吗

    首先,看这个矩阵是不是方阵(即行数和列数相等的矩

    阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。

    不过限定在某个知识范围内是指方阵,例如线性代数当中只对方阵进行奇异矩阵的定义。正常来讲是不限定必须是方阵的,比如在奇异值分解当中,用作估计的时候会定义奇异值矩阵不满秩的矩阵为奇异阵,当然就不再限定是方阵。这种情况下矩阵不可求广义逆,即使求莫奈伪逆也要用特殊的方法,另外这种矩阵如果有物理意义的话,往往不满足正交核函数分解的条件。


    一个矩阵A非奇异当且仅当:(等价的概念)
    A的所有特征值都不为零(lambda=0则|A|=0,只要矩阵A有一个特征值为零,一定是奇异矩阵。即零特征值反映矩阵的奇异性)
    或A的行列式不为零,即 |A|≠0(A 为可逆矩阵,也即A的行列式不为零)
    或A可逆
    或A的秩为n(非奇异矩阵 A满秩,Rank(A)=n;奇异矩阵 A的秩Rank(A)<n)
    或A的列向量线性无关
    或矩阵方程AX=b有唯一非零解(如果A为奇异矩阵,则AX=b有无穷解或者无解)
    或矩阵方程AX=0有且仅有零解(如果A为奇异矩阵,则AX=0有无穷解)
    一个非奇异矩阵可表示成若干个初等矩阵之积。
    一个矩阵非奇异当且仅当它代表的线性变换是个自同构。Note: 若A为非奇异矩阵,其顺序主子阵Ai(i=1,...,n-1)不一定均非奇异。
    如果n 阶方阵A奇异,则一定存在一个n*1阶非零向量X使: X'AX=0;成立。
    [更详细的描述ref:张贤达: 矩阵分析与应用 1.7逆矩阵与伪逆矩阵]

    注意事项

    计量经济学中,当样本容量太少或是当变量间存在完全相关性时会提示“near singular matrix”,意为“近奇异矩阵”。
    在信号处理中,当信号协方差矩阵不是奇异矩阵时,则信号不相关或者部分相关。


    优化有两大难题,一是:局部最小值,二是:ill-condition病态问题。前者俺就不说了,大家都懂吧,我们要找的是全局最小值,如果局部最小值太多,那我们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。那下面我们来聊聊ill-condition。

    条件数condition number与病态矩阵

    ill-condition对应的是well-condition,分别代表什么?

    假设我们有个方程组AX=b,我们需要求解X。如果A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。

    举个例子

           左边的那个。第一行假设是我们的AX=b,第二行我们稍微改变下b,得到的x和没改变前的差别很大。第三行我们稍微改变下系数矩阵A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵A或者b太敏感了。又因为一般我们的系数矩阵A和b是从实验数据里面估计得到的,所以它是存在误差的,如果我们的系统对这个误差是可以容忍的就还好,但系统对这个误差太敏感了,以至于我们的解的误差更大,那这个解就太不靠谱了。所以这个方程组系统就是ill-conditioned病态的,不正常不稳定有问题的。

        右边那个就叫well-condition的系统了。

         对于一个ill-condition的系统,输入稍微改变下,输出就发生很大的改变,这表明我们的系统不能实用。例如对于一个回归问题y=f(x),我们是用训练样本x去训练模型f,使得y尽量输出我们期待的值,例如0。那假如我们遇到一个样本x’,这个样本和训练样本x差别很小,面对他,系统本应该输出和上面的y差不多的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一个人脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。

    奇异的本质原因在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为什么这个矩阵为什么会有大的条件数,事实上,正规阵在二范数下的条件数就可以表示成 abs(最大特征值/最小特征值)。

    病态的衡量标准:条件数condition number

    所以如果一个系统是ill-conditioned病态的,我们就会对它的结果产生怀疑。那到底要相信它多少呢?我们得找个标准来衡量吧,因为有些系统的病没那么重,它的结果还是可以相信的。终于回来了,上面的condition number就是拿来衡量ill-condition系统的可信度的。

    condition number的定义

    条件数是线性方程组Ax=b的解对b中的误差或不确定度的敏感性的度量。数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A的逆‖,对应矩阵的3种范数,相应地可以定义3种条件数。

    condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。

    从线性代数的分析可知,矩阵的条件数总是大于1,正交矩阵的条件数等于1,奇异矩阵的条件数为无穷大,而病态矩阵的条件数则为比较大的数据(远大于1)。也就是说奇异矩阵一定是病态的!

    如果方阵A是非奇异的,那么A的conditionnumber定义为:

    也就是矩阵A的norm乘以它的逆的norm。所以具体的值是多少,就要看你选择的norm是什么了。

    如果方阵A是奇异的,那么A的condition number就是正无穷大了

    实际上,每一个可逆方阵都存在一个condition number。但如果要计算它,我们需要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。

    当然,这个定义依赖于范数的选取。

    • \|\cdot \|l_2 矩阵范数
    \kappa(A) = \frac{\sigma_{max}(A)}{\sigma_{min}(A)} 其中\sigma_{max}(A)\sigma_{min}(A)分别是A的极大和极小奇异值。因此
    • A是正规矩阵则
    \kappa(A) = \left|\frac{\lambda_{max}(A)}{\lambda_{min}(A)}\right| (\lambda_{max}(A),\ \lambda_{min}(A)分别是A的极大和极小(根据模数)特征值
    • A是酉矩阵则
    \kappa(A) = 1
    • \|\cdot \|l_{\infty} 矩阵范数A是下三角矩阵,非奇异(也即a_{ii} \ne 0 \; \forall i)则:\kappa(A) \geq \frac{\max_i(|a_{ii}|)}{\min_i(|a_{ii}|)}

    其它意义下的条件数

    奇异值分解,多项式求根,特征值和其它许多问题的条件数也可以有定义。

    通常,如果一个数值问题是适定的,它可以表达为一个函数f映射它的数据(一个实数的m元组x)到它的解(一个实数的n元组y)。

    它的条件数则定义为解中的相对误差的半径和数据中的相对误差的比的最大值,取遍整个问题的定义域:

    \max \left\{ \left| \frac{f(x) - f(x^*)}{f(x)} \right| \left/ \left| \frac{x - x^*}{x} \right| \right. : |x - x^*| < \epsilon \right\}

    其中\epsilon是问题中的数据的偏差的某个合理的小数值。

    如果f也是可微的,这可以近似的表示为

    \left| \frac{ f'(x) }{ f(x) } \right|. \left| x \right|.

    为什么要范数?

    范数就相当于衡量一个矩阵的大小,我们知道矩阵是没有大小的,但上面不是要衡量一个矩阵A或者向量b变化的时候,我们的解x变化的大小吗?所以肯定得要有一个东西来度量矩阵和向量的大小吧?它就是范数,表示矩阵大小或者向量长度。对于AX=b,我们可以有以下的结论:

    也就是我们的解x的相对变化和A或者b的相对变化是有像上面那样的关系的,其中k(A)的值就相当于倍率,相当于x变化的界。

    一句话总结:condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。

    [wikipedia: 条件数]

    皮皮blog



    矩阵求逆

    非奇异正方矩阵A的逆矩阵A-1

    m*n(m!=n)的长方形满列秩矩阵的左伪逆矩阵(A^HA)^-1A^H, 满行秩矩阵的右伪逆矩阵A^H(AA^H)^-1

    秩亏缺矩阵的逆矩阵:Moore-Penrose逆矩阵

    [张贤达: 矩阵分析与应用 1.7逆矩阵与伪逆矩阵]

    奇异矩阵/病态矩阵的求逆

     L2范数有助于处理条件数 condition number不好的情况下矩阵求逆很困难的问题。

    如将下面的奇异矩阵XTX改造一下再求逆:

     

    [最优化方法:范数和规则化 ]

    还有SVD分解的方法?Moore-Penrose逆矩阵?

    皮皮blog

    from: http://blog.csdn.net/pipisorry/article/details/52241141

    ref: [张贤达: 矩阵分析与应用]


    展开全文
  • 矩阵

    千次阅读 2012-09-09 11:15:21
    矩阵 维基百科,自由的百科全书 线性代数 向量 · 矩阵 · 行列式 · 线性空间 显示▼向量 显示▼矩阵与行列式 显示...
    
    

    矩阵

    维基百科,自由的百科全书
    线性代数
    \mathbf{A} = \begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}
    向量 · 矩阵  · 行列式  · 线性空间
    矩陣

    數學上,一個m×n矩陣是一个由mn列元素排列成的列。矩陣里的元素可以是数字符号或数学式。以下是一个由6个数字元素构成的2行3列的矩阵:

    \begin{bmatrix}1 & 9 & -13 \\20 & 5 & -6 \end{bmatrix}.

    大小相同(行数列数都相同)的矩阵之间可以相互加减,具体是对每个位置上的元素做加减法。矩阵的乘法则较为复杂。两个矩阵可以相乘,当且仅当第一个矩阵的列数等于第二个矩阵的行数。矩阵的乘法满足结合律分配律,但不满足交换律

    矩阵的一个重要用途是解线性方程组。线性方程组中未知量的系数可以排成一个矩阵,加上常数项,则称为增广矩阵。另一个重要用途是表示线性变换,即是诸如f(x) = 4x之类的線性函數的推广。设定基底后,某个向量v可以表示为m×1的矩阵,而线性变换f可以表示为行数为m的矩阵R,使得经过变换后得到的向量f(v)可以表示成Rv的形式。矩阵的特征值特征向量可以揭示线性变换的深层特性。

    矩陣是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学力学光学量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵准对角矩阵,有特定的快速运算算法。关于矩阵相关理论的发展和应用,請參考矩陣理論。在天体物理量子力学等领域,也会出现无穷维的矩阵,是矩阵的一种推广。

    [编辑]
    矩阵的概念最早于1922年见于中文。1922年,程廷熙在一篇介绍文章中将矩阵译为“纵横阵”。1925年,科学名词审查会算学名词审查组在《科学》第十卷第四期刊登的审定名词表中,矩阵被翻译为“矩阵式”,方块矩阵翻译为“方阵式”,而各类矩阵如“正交矩阵”、“伴随矩阵”中的“矩阵”则被翻译为“方阵”。1935年,中国数学会审查后,中华民国教育部审定的《数学名词》(并“通令全国各院校一律遵用,以昭划一”)中,“矩阵”作为译名首次出现。1938年,曹惠群在接受科学名词审查会委托就数学名词加以校订的《算学名词汇编》中,认为应当的译名是“长方阵”。中华人民共和国成立后编订的《数学名词》中,则将译名定为“(矩)阵”。1993年,中国自然科学名词审定委员会公布的《数学名词》中,“矩阵”被定为正式译名,并沿用至今[1]
    译名

    [编辑]定义

    将一些元素排列成若干行,每行放上相同数量的元素,就是一个矩阵。这里说的元素可以是数字,例如以下的矩阵:

    \mathbf{A} = \begin{bmatrix}9 & 13 & 5 \\1 & 11 & 7 \\3 & 9 & 2 \\6 & 0 & 7 \end{bmatrix}

    排列成的形状是矩形,所以称为矩阵。在中國大陸,橫向的元素组称為「行」,縱向称為「列」,而在台灣則相反,橫向称為「列」,縱向称為「行」。矩阵一般用大写拉丁字母表示,需要具体写出其中元素时,一般用方括号或圆括号括起。以上的矩阵A是一个4行3列的矩阵。

    行数和列数是1的矩阵分别称为行向量和列向量。这是因为一个向量可以表示成行数或列数是1的矩阵形式。矩阵的任一行(列)都是一个行(列)向量,例如矩阵A的第一行  \begin{bmatrix}9 & 13 & 5 \end{bmatrix} 就是一个行向量。行(列)向量可以看成一个向量,因此可以称矩阵的两行(列)相等,或者某一行等于某一列,表示其对应的向量相等。

    [编辑]标记

    一个矩阵A從左上角數起的第i 行第j 列上的元素称为第i,j項,通常记为\scriptstyle \mathbf{A}_{i,j} \scriptstyle  \mathbf{a}_{ij} \scriptstyle  \mathbf{a}_{i,j} \scriptstyle \mathbf{A}[i,j]。在上述例子中 \scriptstyle \mathbf{A}[4,3] = 7 。如果不知道矩阵A的具体元素,通常也会将它记成\scriptstyle \mathbf{A} = \left[ \mathbf{a}_{ij} \right]_{m \times n}\scriptstyle \mathbf{A} = \left[ \mathbf{a}_{i,j} \right]_{m \times n}。反之,如果A的元素可以写成只与其行数i和列数j有关的统一函数f,那么也可以用\scriptstyle \mathbf{A} = \left[ f(i,j) \right]_{m \times n}作为A的简写。例如\scriptstyle \mathbf{B} = \left[ i+2j \right]_{2 \times 3}是矩阵

    \mathbf{B} = \begin{bmatrix}3 & 5 & 7 \\4 & 6 & 8 \end{bmatrix}

    的简写。要注意的是,一些计算机编程语言中,会将第1行(列)称为第0行(列),从而对矩阵的写法产生影响,比如矩阵B就要改写成\scriptstyle \mathbf{B} = \left[ i+2j+3 \right]_{2  \times 3}

    矩阵的元素可以是数字、符号或数学表达式。一般为了支持矩阵的运算,矩阵的元素之间应当能做加减法和乘法,所以是某个里的元素。最常见的是元素属于实数域或复数域的矩阵,简称为实矩阵和复矩阵。更一般的情况下,矩阵的元素可以是由一个中的元素排成。 给定一个R,所有由R中元素排成的m×n矩陣的集合写作\mathcal{M}(m,n,\mathbf{R})\mathcal{M}_{m \times n}(\mathbf{R})。若m = n,則通常記以 \mathcal{M}(m,\mathbf{R})\mathcal{M}_m (\mathbf{R}),称其为n维矩阵或方阵

    [编辑]矩陣的基本運算

    矩阵的最基本运算包括矩阵加(减)法,数乘和转置运算。被称为“矩阵加法”、“数乘”和“转置”的运算不止一种[2],其中最基本最常用的定义如下:

    运算 定义 例子
    加(减)法 m×n 矩陣AB的和(差):A±B為一个m×n矩陣,其中每个元素是AB相应元素的和(差),
    (A ± B)i,j = Ai,j ± Bi,j
    其中 1 ≤ i ≤ m , 1 ≤ j ≤ n.

    \begin{bmatrix}1 & 3 & 1 \\1 & 0 & 0\end{bmatrix}+\begin{bmatrix}0 & 0 & 5  \\7 & 5 & 0\end{bmatrix}=\begin{bmatrix}1+0 & 3+0 & 1+5 \\1+7 & 0+5 & 0+0\end{bmatrix}=\begin{bmatrix}1 & 3 & 6 \\8 & 5 & 0\end{bmatrix}

    数乘 标量c与矩陣A的数乘:cA的每个元素是A的相应元素与c的乘积,
    (cA)i,j = c · Ai,j.
    2 \cdot\begin{bmatrix}1 & 8 & -3 \\4 & -2 & 5\end{bmatrix}=\begin{bmatrix}2 \cdot 1 & 2\cdot 8 & 2\cdot (-3) \\2\cdot 4 & 2\cdot (-2) & 2\cdot 5\end{bmatrix}=\begin{bmatrix}2 & 16 & -6 \\8 & -4 & 10\end{bmatrix}
    转置 m×n 矩阵A的转置是一个n×m的矩阵,记为AT(有些书中也记为Atr 或tAA'),其中的第i个行向量是原矩阵A的第i个列向量;或者说,转置矩阵ATi行第j列的元素是原矩阵Aj行第i列的元素,
    (AT)i,j = Aj,i.
    \begin{bmatrix}1 & 2 & 3 \\0 & -6 & 7\end{bmatrix}^T =\begin{bmatrix}1 & 0 \\2 & -6 \\3 & 7\end{bmatrix}

    矩阵的加法运算满足交换律:A + B = B + A[3]。矩阵的转置和数乘运算对加法满足分配律:

    (A + B)T = AT + BT
    c(A + B) = cA + cB

    矩阵加法和数乘兩種運算使得\mathcal{M}(m,n,\mathbb{R})成為一个mn维的實數線性空間。而转置和数乘运算满足类似于结合律的规律:

    c(AT) = (cA)T

    矩阵也有类似行列式的初等变换,即对矩阵的某些行和某些列进行三类操作:交换两行(列),将一行(列)的每个元素都乘以一个固定的量,以及将一行(列)的每个元素乘以一个固定的量之后加到另一行(列)的相应元素上。这些操作在求矩阵的逆之时有用。

    [编辑]矩阵乘法

    主条目:矩阵乘法
    矩阵AB相乘得到AB的示意图

    两个矩阵的乘法仅当第一个矩陣A的列數和另一个矩阵B的行數相等时才能定义。如Am×n矩陣和Bn×p矩陣,它們的乘積AB是一個m×p矩陣,它的一个元素

     [\mathbf{AB}]_{i,j} = A_{i,1}B_{1,j} + A_{i,2}B_{2,j} + \cdots + A_{i,n}B_{n,j} = \sum_{r=1}^n A_{i,r}B_{r,j}

    其中 1 ≤ i ≤ m, 1 ≤ j ≤ p[4]

    例如

      \begin{bmatrix}    1 & 0 & 2 \\    -1 & 3 & 1 \\  \end{bmatrix}\times  \begin{bmatrix}    3 & 1 \\    2 & 1 \\    1 & 0  \end{bmatrix}=  \begin{bmatrix}     (1 \times 3  +  0 \times 2  +  2 \times 1) & (1 \times 1   +   0 \times 1   +   2 \times 0) \\    (-1 \times 3  +  3 \times 2  +  1 \times 1) & (-1 \times 1   +   3 \times 1   +   1 \times 0) \\  \end{bmatrix}=  \begin{bmatrix}    5 & 1 \\    4 & 2 \\  \end{bmatrix}

    矩阵的乘法满足结合律和对矩阵加法的分配律(左分配律和右分配律):

    • 结合律:(AB)C = A(BC),
    • 左分配律: (A + B)C = AC + BC,
    • 右分配律: C(A + B) = CA + CB.

    矩阵的乘法与数乘运算之间也满足类似结合律的规律;与转置之间则满足倒置的分配律。

    c(AB) =(cA)B = A(cB)
    (AB)T = BTAT

    矩阵乘法不满足交换律。一般来说,矩陣AB的乘积AB存在,但BA不一定存在,即使存在,大多数时候 AB ≠ BA。比如下面的例子:

    \begin{bmatrix}1 & 2\\3 & 4\\\end{bmatrix}\begin{bmatrix}0 & 1\\0 & 0\\\end{bmatrix}=\begin{bmatrix}0 & 1\\0 & 3\\\end{bmatrix},\qquad \quad \begin{bmatrix}0 & 1\\0 & 0\\\end{bmatrix}\begin{bmatrix}1 & 2\\3 & 4\\\end{bmatrix}=\begin{bmatrix}3 & 4\\0 & 0\\\end{bmatrix}.

    这一特性使得矩阵代数与常见的一些数域(有理数、实数、复数)以及环(多项式环、整数环)都不同。给定一个n维的方块矩阵A,与A交换的所有方块矩阵构成一个环,称为A的交换子环。这些矩阵也构成\mathcal{M}(n,\mathbb{R})的一个子空间,称为A的可交换空间[5]。与\mathcal{M}(n,\mathbb{R})中所有矩阵交换的矩阵只有形如 \lambda \mathsf{I}_n , \, \lambda \in \mathbb{R}的矩阵(称为数乘矩阵)。其中的 \mathsf{I}_n 单位矩阵,也就是主对角线上的元素为1,其它元素为0的矩阵。任意矩阵M乘以单位矩阵都得到自身:  \mathbf{M} \mathsf{I}_n =  \mathbf{M} = \mathsf{I}_n \mathbf{M}

    除了最常见的矩阵乘法定义以外,也有一些较不常见的矩阵乘法,比如阿达马乘积克罗内克乘积[6]

    [编辑]线性方程组

    主条目:线性方程组

    矩阵乘法的一个基本应用是在线性方程组上。线性方程组是方程组的一种,它符合以下的形式:

     \begin{cases}a_{1,1}x_{1} + a_{1,2}x_{2} + \cdots + a_{1,n}x_{n}=  b_{1} \\                     a_{2,1}x_{1} + a_{2,2}x_{2} + \cdots + a_{2,n}x_{n}=  b_{2} \\                     \vdots \quad \quad \quad \vdots \\                     a_{m,1}x_{1} + a_{m,2}x_{2} + \cdots + a_{m,n}x_{n}=  b_{m} \end{cases}

    其中的a_{1,1}, \, a_{1,2}以及b_{1}, \, b_{2}等等是已知的常数,而x_{1}, \, x_{2}等等则是要求的未知数。运用矩阵的方式,可以将线性方程组写成一个向量方程:

    \mathbf{A} \mathbf{x} = \mathbf{b}

    其中,A是由方程组里未知量的系数排成的m×n 矩陣x 是含有n 个元素的行向量,b 是含有m 个元素的行向量[7]

    \mathbf{A} =\begin{bmatrix}a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\\vdots & \vdots & \ddots & \vdots \\a_{m,1} & a_{m,2} & \cdots & a_{m,n}\end{bmatrix},\quad\mathbf{x} =\begin{bmatrix}x_1 \\x_2 \\\vdots \\x_n\end{bmatrix},\quad\mathbf{b} =\begin{bmatrix}b_1 \\b_2 \\\vdots \\b_m\end{bmatrix}

    这个写法下,将原来的多个方程转化成一个向量方程,在已知矩阵  \mathbf{A}  和向量 \mathbf{b} 的情况下,求未知向量\mathbf{x}

    [编辑]綫性變換

    主条目:线性变换

    矩陣是綫性變換的便利表達法。矩陣乘法的本质在联系到綫性變換的时候最能体现,因为矩阵乘法和线性变换的合成有以下的連繫: 以 \mathbb{R}^n表示所有長度為n的行向量的集合。每个m×n的矩陣A都代表了一个从 \mathbb{R}^n射到 \mathbb{R}^m的线性变换。反过来,對每個綫性變換f : \mathbb{R}^n \rightarrow \mathbb{R}^m,都存在唯一m×n矩陣  A_f  使得對所有 \mathbb{R}^n中的元素x, f(x) = A_f x 。这个矩阵 A_f i 行第j 列上的元素是正则基向量\mathbf{e}_j = (0, \cdots ,0, 1,0, \cdots 0)^T(第j个元素是1,其余元素是0的向量)在f映射后的向量f(\mathbf{e}_j)的第i个元素。

    也就是说,从 \mathbb{R}^n射到\mathbb{R}^m的线性变换构成的向量空间 \mathcal{L} \left( \mathbb{R}^n , \mathbb{R}^m \right) 上存在一个到\mathcal{M}(m,n,\mathbb{R})一一映射f   \mapsto  A_f

    以下是一些典型的2维实平面上的线性变换对平面向量(图形)造成的效果,以及它们对应的2维矩阵。其中每个线性变换将蓝色图形映射成绿色图形;平面的原点(0, 0)用黑点表示。

    水平错切变换
    幅度m=1.25.
    水平反射变换 挤压”变换,
    压缩程度r=3/2
    放缩变换,3/2倍 旋转变换,左转30°
    \begin{bmatrix}1 & 1.25  \\0 & 1 \end{bmatrix} \begin{bmatrix}-1 & 0  \\0 & 1 \end{bmatrix} \begin{bmatrix}3/2 & 0  \\0 & 2/3 \end{bmatrix} \begin{bmatrix}3/2 & 0  \\0 & 3/2 \end{bmatrix} \begin{bmatrix}\cos(\pi / 6) & -\sin(\pi / 6)\\ \sin(\pi / 6) & \cos(\pi / 6)\end{bmatrix}
    VerticalShear m=1.25.svg Flip map.svg Squeeze r=1.5.svg Scaling by 1.5.svg Rotation by pi over 6.svg

    设有k×m的矩陣B代表綫性變換g : Rm -> Rk,則矩陣積BA代表了綫性變換的复合g o f[8],因为

    (g ∘ f)(x) = g(f(x)) = g(Ax) = B(Ax) = (BA)x

    矩阵的秩是指矩阵中线性无关的行(列)向量的最大个数[9],同时也是矩阵对应的线性变换的像空间的维度[10]秩-零化度定理说明矩阵的列数量等于矩阵的秩与零空间维度之和[11]

    [编辑]方块矩阵

    主条目:方块矩阵

    行数与列数相同的矩阵称为方块矩阵,简称方阵。所有n维的方块矩阵构成一个线性空间,这个空间对矩阵乘法也是封闭的,因此也是一个代数。方阵A称为可逆或非奇异的,如果存在另一个方阵B,使得

    AB = In

    成立。这时候可以证明也有BA = In成立[12],可将矩阵B称为A的逆矩阵[13]。一个矩阵A的逆矩阵如果存在的话,就是唯一的,通常记作A−1

    矩阵A的元素Ai,i称为其主对角线上的元素。方块矩阵A的所有主对角线元素之和称为它的,写作tr(A)。尽管矩阵的乘法不满足交换律,方阵相乘时交换顺序会导致乘积变化,但它们的迹不会变,即tr(AB) = tr(BA)[14]。除此以外,矩阵转置的迹等于其自身的迹,tr(A) = tr(AT)。

    如果一个方阵只有主对角线上的元素不是0,其它都是0,那么称其为对角矩阵。如果主对角线上方的元素都是0,那么称为下三角矩阵;反之如果主对角线下方的元素都是0,那么称为上三角矩阵。例如n = 3的时候,这些矩阵分别写作:

          \begin{bmatrix}           d_{11} & 0 & 0 \\           0 & d_{22} & 0 \\           0 & 0 & d_{33} \\        \end{bmatrix} (对角矩阵),       \begin{bmatrix}           l_{11} & 0 & 0 \\           l_{21} & l_{22} & 0 \\           l_{31} & l_{32} & l_{33} \\        \end{bmatrix} (下三角矩阵)和         \begin{bmatrix}           u_{11} & u_{12} & u_{13} \\           0 & u_{22} & u_{23} \\           0 & 0 & u_{33} \\        \end{bmatrix} (上三角矩阵)。

    [编辑]行列式

    主条目:行列式
    R2里的一个线性变换f将蓝色图形变成绿色图形,面积不变,而顺时针排布的向量x1和x2的变成了逆时针排布。对应的矩阵行列式是-1.

    方块矩阵A的行列式是一个将其映射到标量的函数,记作 det(A) 或 |A|,反应了矩阵自身的一定特性。一个方阵的行列式等于0当且仅当该方阵不可逆。系数是实数的时候,二维(三维)方阵A的行列式的绝对值表示单位面积(体积)的图形经过A对应的线性变换后得到的图形的面积(体积),而它的正负则代表了对应的线性变换是否改变空间的定向:行列式为正说明它保持空间定向,行列式为负则说明它逆转空间定向。

    2×2矩阵的行列式是

    \det \begin{pmatrix}a&b\\c&d\end{pmatrix} = ad-bc.

    3×3矩阵的行列式由6项组成。更高维矩阵的行列式则可以使用莱布尼兹公式写出[15],或使用拉普拉斯展开由低一维的矩阵行列式递推得出[16]

    两个矩阵相乘,乘积的行列式等于它们的行列式的乘积:det(AB) = det(A)·det(B)[17]。将矩阵的一行(列)乘以某个系数加到另一行(列)上不改变矩阵的行列式,将矩阵的两行(列)互换则使得其行列式变号[18]。用这两种操作可以将矩阵变成一个上三角矩阵或下三角矩阵,而后两种矩阵的行列式就是主对角线上元素的乘积,因此能方便地计算。运用行列式可以计算线性方程组的解(见克萊姆法則[19]

    [编辑]特征值与特征向量

    主条目:特征向量

    n×n的方块矩阵A的一个特征值和对应特征向量是满足

    \mathbf{Av} = \lambda \mathbf{v}[20]

    的标量\lambda以及非零向量\mathbf{v}。特征值和特征向量的概念对研究线性变换很有帮助。一个线性变换可以通过它对应的矩阵在向量上的作用来可视化。一般来说,一个向量在经过映射之后可以变为任何可能的向量,而特征向量具有更好的性质[21]。假设在给定的基底下,一个线性变换对应着某个矩阵A,如果一个向量\mathbf{x}可以写成矩阵的几个特征向量的线性组合:

    \mathbf{x} = c_1 \mathbf{x}_{\lambda_1} + c_2 \mathbf{x}_{\lambda_2} + \cdots + c_k \mathbf{x}_{\lambda_k}

    其中的 \mathbf{x}_{\lambda_i} 表示此向量对应的特征值是\lambda_i,那么向量\mathbf{x}经过线性变换后会变成:

    \mathbf{Ax} = c_1 \lambda_1 \mathbf{x}_{\lambda_1} + c_2 \lambda_2 \mathbf{x}_{\lambda_2} + \cdots + c_k \lambda_k \mathbf{x}_{\lambda_k}

    可以清楚地知道变换后向量的结构。

    另一个等价的特征值定义是:标量\lambda为特征值,如果矩阵\mathbf{A} - \lambda \mathsf{I}_n是不可逆矩阵。根据不可逆矩阵的性质,这个定义也可以用行列式方程描述:\lambda为特征值,如果

    \det(\lambda \mathsf{I}_n - \mathbf{A}) = 0.\ [22]

    这个定义中的行列式可以展开成一个关于\lambdan多项式,叫做矩阵A特征多项式,记为p_{\mathbf{A}}。特征多项式是一个首一多项式(最高次项系数是1的多项式)。它的根就是矩阵A特征值[23]哈密尔顿-凯莱定理说明,如果用矩阵A本身代替多项式中的不定元\lambda,那么多项式的值是零矩阵[24]

    p_{\mathbf{A}}(\mathbf{A}) = 0.

    [编辑]对称

    主条目:对称矩阵

    转置等于自己的矩阵,即满足A = AT的方块矩阵A叫做对称矩阵。满足A = - AT的矩阵称为反对称矩阵。在复系数矩阵中,则有埃尔米特矩阵的概念:满足A =A*的方块矩阵称为埃尔米特矩阵,其中的A*表示A共轭转置矩阵。

    根据谱定理,实对称矩阵和复埃尔米特矩阵拥有特征基,即由矩阵的特征向量组成的基底。因此任何向量都能表示成矩阵特征向量的线性组合。此外,这两类矩阵的特征值都是实数[25]

    [编辑]正定性

    矩阵表达式 \begin{bmatrix}1/4 & 0\\0 & -1/4\end{bmatrix} \begin{bmatrix}1/4 & 0\\0 & 1/4\end{bmatrix}
    正定性 不定矩阵 正定矩阵
    对应二次型 Q(x, y) = \frac14 (x^2 - y^2) Q(x, y) = \frac14 (x^2 + y^2)
    取值图像 Hyperbolic vs elliptic paraboloid.png
    说明 正定矩阵对应的二次型的取值范围永远是正的,
    不定矩阵对应的二次型取值则可正可负
    主条目:正定矩阵

    n×n的实对称矩阵A如果满足对所有非零向量x ∈ Rn,对应的二次型

    Q(x) = xTAx

    函数值都是正数,就称A为正定矩阵。类似地还有半正定矩阵、负定矩阵、不定矩阵等概念[26]。对称矩阵的正定性与其特征值密切相关。矩阵是正定的当且仅当其特征值都是正数[27]

    [编辑]矩阵的计算

    矩阵在许多学科领域中都有应用,在很多时候,除了需要知道矩阵的理论性质以外,还需要计算矩阵的数值。为了矩阵的计算能够足够精确与快捷,数值线性代数中专门有研究矩阵的数值计算方法[28]。与其它的数值计算一样,矩阵的数值计算注重的主要也是算法复杂度数值稳定性。矩阵的数值计算可以使用直接计算,也可以用迭代算法,例如在计算方块矩阵的特征值时,可以从一个非零向量x_0开始,通过特定迭代方法得到一个逼近某个特征向量的向量序列[29]

    测量一个算法的复杂度是指估计此算法需要的基本运算如数字的加法和乘法的次数,或者找出它的一个上界。例如按照定义计算的话,两个n阶方阵的乘法需要n^3次数字乘法计算,因为其乘积是一个n阶方阵,有n^2个元素,计算每个元素需要n次数字乘法。如果使用施特拉森算法的话,可以将数字乘法的次数减低到大约n^{2.8}[30]。此外,编程语言或环境本身对算法的复杂度也会有影响。

    某些特殊类型的矩阵携带的数据量比一般矩阵要少,同时带来的信息量比一般矩阵多。一个重要的例子是稀疏矩阵,这类矩阵中绝大部分的元素是零。有关稀疏矩阵的计算,如计算稀疏矩阵A的线性方程组Ax = b时,可以使用一些专用于稀疏矩阵的特殊算法(比如共轭梯度法[31]),减低计算复杂度。

    算法的数值稳定性是指输入值的小变化不会让计算结果产生很大偏差。例如计算矩阵的逆时,可以用以下的算法(其中adj(A)表示A伴随矩阵

    A−1 = Adj(A) / det(A)

    这个算法在A的行列式接近0的时候会引起很大的舍入误差[32]。而如果使用全选主元的高斯消去法求逆,则在复杂度降低的同时能够避免舍入误差,保证数值稳定性。

    [编辑]矩阵分解

    矩阵研究的一大方向是将一般的矩阵用一些比较“简单”的矩阵来表示。这种表示方式称为矩阵的变换与分解。矩阵变换与分解的方法有很多,它们的目的都是希望化简后的矩阵保持原矩阵的某些性质,比如行列式、秩或逆矩阵,而形式相对简单,因而能用容易地进行讨论和计算,或者能使得某些算法更易执行。

    LU分解将矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积[33]。分解后的矩阵可以方便某些问题的解决。例如解线性方程组时,如果将系数矩阵A分解成A = LU的形式,那么方程的求解可以分解为求解Ly = bUx = y两步,而后两个方程可以十分简洁地求解(详见三角矩阵中“向前与向后替换”一节)。又例如在求矩阵的行列式时,如果直接计算一个矩阵A的行列式,需要计算大约 (n + 1)! 次加法和乘法;而如果先对矩阵做LU分解,再求行列式,就只需要大约n^3次加法和乘法,大大降低了计算次数。这是因为做LU分解的复杂度大约是n^3次,而后注意到LU是三角矩阵,所以求它们的行列式只需要将主对角线上元素相乘即可。

    若尔当矩阵,其中灰色框内的是若尔当块

    高斯消去法也是一种矩阵分解方法。通过初等变换操作,可以将任何矩阵变为阶梯形矩阵,而每个操作可以看做是将矩阵乘上一个特定的初等矩阵[34]奇异值分解则是另一种分解方法,将一个矩阵表示成3个矩阵的乘积:A = UDV。其中UV酉矩阵D对角矩阵

    特征分解是将一个矩阵A写成PDP−1的形式,其中P是一个可逆矩阵,D是对角矩阵[35]。如果A的特征分解存在,就称它是可对角化的矩阵。不能对角化的矩阵,也有类似的分解方式。任意的矩阵A都可以写成PJP−1的形式,其中的矩阵J若尔当标准型。若尔当标准型是矩阵的一种,它与对角矩阵类似,只不过主对角线上的元素不是数值,而是若尔当块:主对角线上为同一元素\lambda_i,主对角线右上一行的次对角线上都是1,其它元素都是0的矩阵(见右图)[36]。特征分解可以方便计算矩阵的幂次和多项式,如要计算An

    An = (PDP−1)n = PDP−1PDP−1...PDP−1 = PDn P−1

    而其中对角矩阵的幂次Dn要比An容易计算得多。同理还可计算矩阵指数eA(在线性微分方程中有应用)、矩阵对数矩阵的平方根[37]。为了提高算法的数值稳定性,还有舒尔分解等矩阵分解方法[38]

    [编辑]矩阵的推广

    矩阵的元素除了可以是实数和复数以外,也可以任意环或域中元素。在线性代数中,矩阵的性质可以经由有限维的线性空间中的线性变换定义。更广泛的,无限维空间中的线性算子,则可以定义更广泛的无穷维矩阵。矩阵的另一种推广是张量。标量可以看成零维方式排列的数据(只有一个“点”),向量可以看成是一维方式排列的数据(若干个“点”排成的“线段”),矩阵可以看成是二维方式排列的数据(若干个“线段”排成的“矩形”),而张量的概念则包括了这几种排列方式。在张量的概念中,标量是零维张量,向量是一维张量,矩阵是二维向量,而更高维方式排列的数据方式就是高维张量[39]

    [编辑]一般域和环上的矩阵

    矩阵的元素除了可以是实数和复数以外,还可以是任何能够使得矩阵的运算律成立的元素。首先,矩阵的元素可以是任意一个域(即能够进行“加减乘除”运算的集合)中元素。例如编码理论中会出现系数为有限域中元素的矩阵,以及有理数系数的矩阵。如果矩阵的系数所在域K不是代数闭域,那么在求矩阵的特征值时,由于特征值是相应的特征多项式的根,可能不在系数域K中,而是在系数域的某个扩域L中。反过来,如果考虑扩域L/K,以及L中的一个元素\alpha,以及L中线性变换m_{\alpha} : \, x \mapsto \alpha x,那么由于m_{\alpha}也是一个K-线性变换,它可以表示成一个n×nK系数矩阵X_{\alpha} ,其中的n是扩域L/K的阶数。\alpha是这个矩阵的特征值,这个矩阵的特征多项式  p_{X_{\alpha} }\alphaK中的最小多项式 \operatorname{min}_{\mathbf{K}} (\alpha) 的幂次:

     p_{X_{\alpha} } = \left(  \operatorname{min}_{\mathbf{K}} (\alpha)  \right)^r \,.

    其中的r是扩域L/K (\alpha)的阶数[40]

    更一般的情况是矩阵的元素属于某个环R[41]。环是比域更广泛的概念,只要求其中元素能够进行加减法和乘法运算(不一定能定义除法)。给定一个环 R\mathcal{M}(m,n,\mathbf{R})中的矩阵之间可以相互加减以及相乘,所以\mathcal{M}(m,n,\mathbf{R})关于矩阵的加法和乘法也构成一个环,称为矩阵环n维方阵的环\mathcal{M}(n,\mathbf{R})與左R-Rn自同態同構[42]

    R交换环,則\mathcal{M}(m,\mathbf{R})是一个帶單位元R-代數,满足结合律,但不满足交换律。其中的矩阵仍然可以用莱布尼兹公式定義行列式。一个矩阵可逆当且仅当其行列式为环R中的可逆元(域上的矩阵可逆只需行列式不等于0)[43]

    [编辑]矩阵与线性变换

    前面已经提到,所有Rn → Rm的线性变换都对应着一个\mathcal{M}(m,n,\mathbf{R})中的矩阵。更一般地,给定了基底后,任意两个有限维线性空间之间的线性映射fV →W也对应着一个矩阵Af= (aij)。设空间VW的基底分别是v1, ..., vn 和 w1, ..., wm,那么

    对任意  j=1,\ldots,n  , f(\mathbf{v}_j) = \sum_{i=1}^m a_{i,j} \mathbf{w}_i

    矩阵Af实际上“记录”了V中每个基底向量经过变换后得到的W中的像在基底(w1, ..., wm)下的形式。要注意矩阵的内容取决于基底的选择。可以说,矩阵是线性变换f 在特定“角度”(基底)下的“素描”。不同的“角度”下,描述f 的矩阵是不同的,但这些矩阵都是相似矩阵[44]。与矩阵有关的基本概念都可以用线性变换的层面来解释,比如一个矩阵的转置可以用f 的对偶变换f* : W* → V*来表示[45]

    当矩阵的元素是带单位元的环R中的元素时,m×nR-矩阵对应的则是R-自由模RmRn之间的R-线性变换。n = m 的时候,这些R-线性变换可以相互复合,因此n维的R-矩阵环能够与R-自同态环Rn同构。

    [编辑]矩阵群

    主条目:矩阵群

    是比环更宽泛的代数结构,只需要集合配备一个满足结合律的二元运算,即将两个群内元素映射到群内一元素的运算。矩阵群是指矩阵关于矩阵乘法组成的群[46]。显然,只有方块矩阵才能构成乘法群。所有n维的可逆方阵构成一个群,称为n一般线性群。由于群内每个元素都必须是可逆的,任意的矩阵群都必然是一般线性群的子群

    能够在矩阵乘法和求逆矩阵运算下保持的性质都可以用来刻画一定的矩阵群。例如所有行列式为1的矩阵可以构成一个群,称为n特殊线性群[47]。所有n维的正交矩阵,即满足:

    MTM = I

    的矩阵M也构成一个群,称为n正交群[48]。正交矩阵得名于它在Rn中对应的线性变换具有保角性,也就是说对基本的点积,满足

    (Mv) · (Mw) = v · w.[49]

    每个有限群都同构于一个矩阵群。实际上,每个有限群都同构于某个置换群的子群,而每个置换群都同构于一个矩阵群(见置换群的正则群表示[50])鉴于矩阵群的性质可以通过与矩阵相关的更多手段更好地理解,常常通过研究矩阵群来研究一个有限群。相关的理论称为群表示论

    [编辑]无限维矩阵

    主条目:无限维矩阵

    无穷维矩阵可以指行数或列数无穷大,或两者都是无穷大的矩阵[51]。尽管这样的矩阵无法完整写出,但只要知道每行每列的元素的值,仍然可以对它进行矩阵操作和运算。这里矩阵的行数和列数甚至不一定需要是可数集。需要注意的是,无穷维矩阵的乘法涉及到无穷级数求和,因此只有在相关的无穷级数收敛的时候,才能定义矩阵的乘积[52]。无限维矩阵也可以是方块矩阵,定义为行标记集合与列标记集合相同的矩阵(如\mathbb{N} \times  \mathbb{N}[53]

    无限矩阵无法定义通常意义上的行列式,因此可逆矩阵不一定是方块矩阵,同理,酉矩阵也不一定要是方块矩阵[54]

    [编辑]空矩阵

    主条目:空矩阵

    空矩阵是指行数或列数为零的矩阵。空矩阵的定义可以完善一些关于零维空间的约定。包括约定一个矩阵与空矩阵相乘得到的也是空矩阵,两个n×0和0×p的空矩阵相乘是一个n×p的零矩阵(所有元素都是零的矩阵)。0×0的空矩阵的行列式约定为1,所以它也可以有逆矩阵,约定为它自己[55]

    [编辑]分塊矩陣

    分塊矩陣是指一個大矩陣分割成“矩陣的矩陣”。舉例,以下的矩陣

    P = \begin{bmatrix}1 & 2 & 3 & 2\\1 & 2 & 7 & 5\\4 & 9 & 2 & 6\\6 & 1 & 5 & 8\end{bmatrix}

    可分割成4個2×2的矩陣

    P_{11} = \begin{bmatrix}1 & 2 \\1 & 2 \end{bmatrix}   P_{12} = \begin{bmatrix}3 & 2\\7 & 5\end{bmatrix}  P_{21} = \begin{bmatrix}4 & 9 \\6 & 1 \end{bmatrix}   P_{22} = \begin{bmatrix}2 & 6\\5 & 8\end{bmatrix}
    P = \begin{bmatrix}P_{11} & P_{12}\\P_{21} & P_{22}\end{bmatrix}

    将矩阵分块可以使得矩阵结构清晰,在某些时候可以方便运算、证明。两个大小相同、分块方式也相同的矩阵可以相加。行和列的块数符合矩阵乘法要求时,分块矩阵也可以相乘。将矩阵分块相乘的结果与直接相乘是一样的。用分块矩阵求逆,可以将高阶矩阵的求逆转化为多次低阶矩阵的求逆[56]

    [编辑]应用

    矩阵在许多领域都应用广泛。有些时候用到矩阵是因为其表达方式紧凑,例如在博弈论经济学中,会用收益矩阵来表示两个博弈对象在各种决策方式下的收益[57]文本挖掘索引典汇编的时候,比如在TF-IDF方法中,也会用到文件项矩阵来追踪特定词汇在多个文件中的出现频率[58]

    复数可以用实系数的2×2矩阵表示:

    a + ib \leftrightarrow \begin{bmatrix}a & -b  \\b & a \end{bmatrix},

    这种表示法与复数的加减法、乘法都相兼容。比如,2×2的旋转矩阵可以用来表示模长为1的复数,一个向量乘以此旋转矩阵可以视作一个复数乘以该模长为1的复数。对四元数也有类似的矩阵表达[59]

    早期的密码技术如希尔密码也用到矩阵。然而,矩阵的线性性质使这类密码相对容易破解[60]计算机图像处理也会用到矩阵来表示处理对象,并且用放射旋转矩阵来计算对象的变换,实现三维对象在特定二维屏幕上的投影[61]多项式环上的矩阵在控制论中有重要作用。

    化学中也有矩阵的应用,特别在使用量子理论讨论分子键光谱的时候。具体例子有解罗特汉方程时用重叠矩阵福柯矩阵来得到哈特里-福克方法中的分子轨道

    [编辑]图论

    一个无向图的邻接矩阵\begin{bmatrix}2 & 1 & 0 \\1 & 0 & 1 \\0 & 1 & 0\end{bmatrix}.

    图论中可以用矩阵描述一个有限图[62]。这个矩阵叫做相关矩阵的邻接矩阵,记录了图的每两个顶点之间是否有边连接。对简单图来说,邻接矩阵的元素只取两个值:0和1,第i 行第j 列上取值为0,表示没有从第i 个顶点连到第j 个顶点的边,取值为1则说明有。如果是一般情况的话,第i 行第j 列上的取值是从第i 个顶点连到第j 个顶点的边的数目。距离矩阵则是表示图中各顶点之间距离的矩阵[63]。在研究互联网等复杂网络的时候,邻接矩阵常常会是稀疏矩阵。因此网络理论中有专门研究稀疏矩阵的方面。

    [编辑]数学分析

    在多元函数微积分学中,对二阶偏导数存在的函数fRn → R,可以定义其海森矩阵[64]

    H(f)(x) = \left[ \frac {\partial^2 f}{\partial x_i \, \partial x_j}(x) \right ].
    n=2时,海森矩阵\begin{bmatrix}2 & 0 \\0 & -2\end{bmatrix}的特征值一正一负,说明函数f(x,y) = x2 − y2在 (x = 0, y = 0) 处有一个鞍点(红色点)

    严格来说,仅当函数在某一点上的二阶偏导数存在,才能定义这一点上的海森矩阵。海森矩阵给出了函数在这一点的变化率方面的信息。当给定的点x = (x1, ..., xn)是函数平稳点(即函数f 在这一点上的一阶偏导数\scriptstyle \frac{\partial f }{ \partial x_i}都是0)时,就需要利用海森矩阵来查看函数在这一点周围的增长特性。多元函数在点x泰勒展开是:

    f(x+h) = f(x) + \nabla f (x) \cdot h + \frac12 h^T H(f)(x) h + \circ \left( \| x \|^3\right)

    如果函数在点x的一阶偏导数都是0,那么 \nabla f = 0,所以函数在x附近的变化率取决于海森矩阵H(f)(x)的性质。如果H(f)(x)是正定矩阵,那么函数在点x取得局部最小值,如果是负定矩阵,则函数在x取得局部最大值。在这类情况下,关于函数f 的条件最优化问题可以转变为关于海森矩阵的二次规划问题[65]

    矩阵在多元函数微积分中的另一个应用是雅可比矩阵。函数fRn → Rm在某一点x上的一阶偏导数存在时,可以定义它在这点上的雅可比矩阵[66]

    J_f(x) = \left [\frac {\partial f_i}{\partial x_j}(x) \right ]_{1 \leq i \leq m, 1 \leq j \leq n}.

    如果n>m,而J_f(x)又是满秩矩阵(秩等于m)的话,根据反函数定理,可以找到函数f 在x附近的一个局部的反函数[67]

    偏微分方程理论中,二阶拟线性偏微分方程可以根据最高次偏导项系数构成的矩阵的正定性分类。假设有一个二阶拟线性偏微分方程:

    (\mathbf{E}) \qquad \qquad \sum_{1\leqslant i, j \leqslant n} a_{ij} \frac {\partial^2 f}{\partial x_i \, \partial x_j}  + \sum_{i=1}^n b_i \frac {\partial f}{\partial x_i} + cf = g. \qquad  并假设   a_{ij} =a_{ji},

    记矩阵 \mathbf{A}=\left[ a_{ij} \right]_{1 \leqslant i , j \leqslant n}  。如果矩阵A是正定或负定矩阵,那么就称方程(E)为椭圆形偏微分方程;如果A不可逆,就称(E)为抛物形偏微分方程,如果A可逆而且恰有n - 1个特征值同号,就称(E)为双曲型偏微分方程。其它情况下也称(E)为超双曲形偏微分方程。不同类型的方程解的形式也不一样[68]

    用数值方法解偏微分方程时更需要用到矩阵。一个重要的方法是有限元方法,在求解各种物理中遇到的偏微分方程时广泛使用。有限元方法的基本思想是用一系列“简单”函数的线性组合来“逼近”偏微分方程的精确解。这些“简单”函数通常是指将求解区域分割成一定数量的“小块”后,仅在某一“小块”上非零的分段线性函数。选定了网格和“简单”函数后,可以求解关于刚度矩阵的方程得到近似解。有限元理论中证明了在满足一定的条件下,近似解将随着网格趋于精细而弱收敛到精确解[69][70]


    展开全文
  • surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射 #include "stdafx.h" #include #include #include #include "opencv2/nonfree/features2d.hpp" #include #include using namespace cv; using namespace ...

    surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射

    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include <opencv2/core/core.hpp>
    #include "opencv2/nonfree/features2d.hpp"
    #include<opencv2/legacy/legacy.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    using namespace cv;
    using namespace std;
    
    int main( )
    {
      Mat img_1 = imread( "C:\\temp\\PyramidPattern.jpg", CV_LOAD_IMAGE_GRAYSCALE );
      Mat img_2 = imread( "C:\\temp\\PyramidPatternTest.bmp", CV_LOAD_IMAGE_GRAYSCALE );
      
      if( !img_1.data || !img_2.data )
      { return -1; }
    
      //-- Step 1: Detect the keypoints using SURF Detector
      int minHessian = 400;
    
      SurfFeatureDetector detector( minHessian );
    
      vector<KeyPoint> keypoints_1, keypoints_2;
    
      detector.detect( img_1, keypoints_1 );
      detector.detect( img_2, keypoints_2 );
    
      //-- Step 2: Calculate descriptors (feature vectors)
      SurfDescriptorExtractor extractor;
    
      Mat descriptors_1, descriptors_2;
    
      extractor.compute( img_1, keypoints_1, descriptors_1 );
      extractor.compute( img_2, keypoints_2, descriptors_2 );
    
      //-- Step 3: Matching descriptor vectors using FLANN matcher
      FlannBasedMatcher matcher;
      vector< DMatch > matches;
      vector<vector<DMatch>> m_knnMatches;
    
      matches.clear();
      const float minRatio=1.f / 1.5f;
      matcher.knnMatch(descriptors_1,descriptors_2,m_knnMatches,2);
    
      for (int i=0; i<m_knnMatches.size(); i++)
      {
    	  const DMatch& bestMatch=m_knnMatches[i][0];
    	  const DMatch& betterMatch=m_knnMatches[i][1];
    
    	  float distanceRatio=bestMatch.distance/betterMatch.distance;
    
    	  if (distanceRatio<minRatio)
    	  {
    		  matches.push_back(bestMatch);
    	  }
      }
    
      vector< DMatch > good_matches;
    
      if(!matches.size())
      {
    	  cout<<"matches is empty! "<<endl;
    	  return -1;
      }
      else if (matches.size()<4)
      {
    	  cout<<matches.size()<<" points matched is not enough "<<endl;
      }
      else //单应性矩阵的计算最少得使用4个点
      {
    	  for( int i = 0; i < matches.size(); i++ )
    	  { 
    		  good_matches.push_back(matches[i]);
    	  }  
    
    	  Mat img_matches;
    	  drawMatches( img_1, keypoints_1, img_2, keypoints_2, 
    		  good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), 
    		  vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); 
    	  //☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
    	  //-- Localize the object from img_1 in img_2 
    	  vector<Point2f> obj;
    	  vector<Point2f> scene;
    
    	  for( int i = 0; i < good_matches.size(); i++ )
    	  {
    		  //-- Get the keypoints from the good matches
    		  obj.push_back( keypoints_1[ good_matches[i].queryIdx ].pt );
    		  scene.push_back( keypoints_2[ good_matches[i].trainIdx ].pt ); 
    	  }
    	  Mat H = findHomography( obj, scene, CV_RANSAC );
    
    	  //-- Get the corners from the image_1 ( the object to be "detected" )
    	  vector<Point2f> obj_corners(4);
    	  obj_corners[0]=cvPoint(0,0);
    	  obj_corners[1]=cvPoint( img_1.cols, 0 );
    	  obj_corners[2]=cvPoint(img_1.cols,img_1.rows);
    	  obj_corners[3]=cvPoint(0,img_1.rows);
    	  vector<Point2f> scene_corners(4);
    
    	  perspectiveTransform( obj_corners, scene_corners, H); 
    
    	  for( int i = 0; i < 4; i++ )
    	  {
    		  /* 作用和perspectiveTransform一样
    		  double x = obj_corners[i].x; 
    		  double y = obj_corners[i].y;
    
    		  double Z = 1./( H.at<double>(2,0)*x + H.at<double>(2,1)*y + H.at<double>(2,2) );
    		  double X = ( H.at<double>(0,0)*x + H.at<double>(0,1)*y + H.at<double>(0,2) )*Z;
    		  double Y = ( H.at<double>(1,0)*x + H.at<double>(1,1)*y + H.at<double>(1,2) )*Z;
    		  scene_corners[i] = cvPoint( cvRound(X) + img_1.cols, cvRound(Y) );*/
    		  scene_corners[i].x+=img_1.cols;
    	  } 
    
    	  line( img_matches, scene_corners[0], scene_corners[1], Scalar(0, 255, 0), 2 );
    	  line( img_matches, scene_corners[1], scene_corners[2], Scalar( 0, 255, 0), 2 );
    	  line( img_matches, scene_corners[2], scene_corners[3], Scalar( 0, 255, 0), 2 );
    	  line( img_matches, scene_corners[3], scene_corners[0], Scalar( 0, 255, 0), 2 );
    	  imshow( "Good Matches & Object detection", img_matches );
      }
      waitKey(0);
    
      return 0;
    }
    
    

    附带一些知识点:

    图像特征:

    1.边界

    2.角点(兴趣点)

    3.斑点(兴趣区域)

    角点是图像的一个局部特征,常用的有harris角点,其算法是一种直接基于灰度图像的,稳定性高,尤其对L型角点检测精度高,但由于采用了高斯滤波,运算速度相对较慢,角点信息有丢失和位置偏移的现象,而且角点提取有聚簇现象。具体在OpenCV中的实现就是使用函数cornerHarris。

    除了Harris角点检测,还有Shi-Tomasi角点检测,goodFeaturesToTrack角点检测,将找到的点再用FindCornerSubPix()来找出强特征点。也可以自己制作角点检测的函数,需要用到cornerMinEigenVal函数和minMaxLoc函数,最后的特征点选取,判断条件要根据自己的情况编辑。如果对特征点,角点的精度要求更高,可以用cornerSubPix函数将角点定位到子像素。


    OpenCV仿射变换、投影变换的重要函数

    estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
    getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
    warpAffine():对输入图像进行仿射变换
    findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。
    getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
    warpPerspective(): 对输入图像进行透射变换
    perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
    estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
    transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
    findFundamentalMat:计算多个点对之间的基矩阵H。

    cvStereoCalibrate():中T类型要求了3*1,对与其他形参float和double都支持

    cvStereoRectigy():只支持double类型

    cvStereoRectifyUncalibrated():立体校正算法Hartley算法效果和F矩阵及图像数量有关,

    ps:

    【如果用cvStereoCalibrate()函数计算处理的F矩阵效果和Bouguet算法(cvStereoRectigy())效果一样】

    【如果用cvFindFundamentalMat()函数计算F矩阵,没有Bougut算法好】

    【用Hartley算法(cvStereoRectifyUncalibrated())校正时,别忘了实现要用cvUndistortPoints()去除相机畸变,Bouguet算法(cvStereoRectigy())没有这个要求,实际上它在函数内部校正了相机的畸变。】


    Q&A:

    问题1:如何计算3个二维点对之间的仿射变换矩阵?
    答:使用getAffineTransform()。
    问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?

    答:使用estimateRigidTransform()。

    问题3:如何计算多个二维点对之间的投影变换矩阵(使用误差最小准则 )

    答:findHomography()。

    问题4:如何计算4个二维点对之间的透射变换?
    答:使用getPerspectiveTransform()。
    问题5:如何计算多个三维点对之间的仿射变换?
    答:使用estimateAffine3D。
    问题6:如何对输入图像进行仿射变换?
    答:使用warpAffine()。
    问题7:如何对输入图像进行透射变换?
    答:使用perspectiveTransform()。
    问题8:如何对输入的二维点对进行仿射变换?
    答:使用transform()。
    问题9:如何对输入的三维点对进行投影变换?
    答:使用perspectiveTransform()。


    注意:

    1. 使用findHomography接口获取两张图之间的单应性矩阵H,获得的结果不具有可逆性。举例来说,两张图M1和M2,那么调用findHomography(M1, M2, CV_RANSAC, 4)得到的矩阵H12和findHomography(M2, M1, CV_RANSAC, 4)得到的矩阵H21不具有可逆关系,即:H12的逆不等于H21,H12和H21的逆存在一定的误差,这个误差的产生是因为这个单应性矩阵的求取本身就是采用了RANSAC算法,得到的估算矩阵,是个估算值,所以存在误差。



    展开全文
  • 一、基本概念 1.1、标量函数的定号 定义1-1:若V(0)=0,且对任意非零x,...(2)定号可以是原点邻域上的局部性质,如:标量函数在域上是负定的。 如:(在二维空间下) 正定;半正定;不定 考虑二次函数的定..
  • 李雅普诺夫稳定性理论 1.前期铺垫~ !:稳定性是系统正常工作的重要特性 稳定性,是描述初始条件(不一定为0)下,系统是否具有收敛性,与输入作用无关 在经典控制理论中,有代数判据(劳斯、霍尔维茨)、奈奎斯特...
  • 雅克比矩阵

    千次阅读 多人点赞 2018-11-07 14:09:54
    0 前言 在学习当中,我们应该都或多或少的明白了一个道理,就是实际问题...这个雅克比矩阵自己曾多次遇到,例如,李雅普诺夫分析非线性系统稳定性时用到了索拉可夫斯基时就用雅克比矩阵进行局部线性化;倒立摆系统...
  • 正交矩阵

    千次阅读 2019-02-23 15:37:23
    正交矩阵
  • 李雅普诺夫稳定性

    千次阅读 2019-05-19 14:38:18
    在数学和自动控制领域中,李雅普诺夫稳定性(英语:Lyapunov stability,或李亚普诺夫稳定性)可用来描述一个动力系统的稳定性。如果此动力系统任何初始条件在{\displaystyle x_{0}}附近的轨迹均能维持在{\...
  • 矩阵分析

    千次阅读 2017-11-02 15:46:59
    看了这个视频后觉得自己是个没有学习过线代的人啊,感谢七月算法讲解的矩阵应用。本篇博文完全用作个人学习笔记。一.我们通过图形化来描述一下矩阵的行列和转置间的关系和特性(1)矩阵的行视图 我们以矩阵的每一...
  • 图像局部不变特征描述

    千次阅读 2015-06-13 02:04:09
    图像局部不变特征描述chapter 2 2.2.1 multi scale and multi resolution (size of image) pyramid – multi resolutionscale space – same resolution – 图像局部结构可以用简单形式在不同尺度上描述出来2.2.2 ...
  • 图像局部显著—点特征

    千次阅读 2017-02-28 15:50:21
    基于古老的Marr视觉理论,视觉识别和场景重建的基础即第一阶段为局部显著探测。探测到的主要特征为直觉上可刺激底层视觉的局部显著——特征点、特征线、特征块。  SalientDetection 已经好就没有复习过了,...
  • 灰度共生矩阵的实现

    千次阅读 2014-10-05 20:17:23
    由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两象素之间会存在一定的灰度关系,即图像中灰度的空间相关...灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用方法。
  • 基于古老的Marr视觉理论,视觉识别和场景重建的基础即第一阶段为局部显著探测。探测到的主要特征为直觉上可刺激底层视觉的局部显著——特征点、特征线、特征块。 SalientDetection已经好就没有复习过了,DNN在...
  • 一、线性回归的变种:局部加权线性回归(本地散点平滑估计LOESS) 1.形式:一种非参数学习算法。局部加权线性回归中,针对每个要预测的样本点,我们都要对整个训练集进行一次拟合,因为...A为对角矩阵,对角线每个...
  • 计算灰度共生矩阵

    千次阅读 2015-05-24 22:01:38
    灰度共生矩阵  灰度共生矩阵定义为像素对的联合分布概率,是一个对称矩阵,它不仅反映图像灰度在相邻的方向、相邻间隔、变化幅度的综合信息,但也反映了相同的灰度级像素之间的位置分布特征,是计算纹理特征...
  • 灰度共生矩阵

    千次阅读 2017-10-27 15:36:01
    灰度共生矩阵      灰度共生矩阵,Gray Level Co-occurrence Matrix,简写为GLCM  由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两象素之间会存在一定的灰度关系...
  • 《图像局部不变特征与描述》阅读笔记1
  • 正交向量 正交矩阵

    千次阅读 2017-11-12 22:36:10
    正交向量 正交矩阵
  • 图像局部显著—点特征(SURF)

    千次阅读 2017-03-16 12:02:07
     为了实现尺度不变的特征点检测与匹配,SURF算法则先利用Hessian矩阵确定候选点,然后进行非极大抑制,计算复杂度降低多了。整个算法由以下几个部分组成。 OpenCV源代码Nonfree包含了SURF的源代码,并添加了...
  • 非负矩阵分解NMF

    千次阅读 2015-10-29 11:32:18
    非负矩阵分解NMF是一种新矩阵分解算法,自《Nature》1999年刊登了两位科学家D.D.Lee和H.S.Seung有关非负矩阵研究的成果后,此分解算法逐渐被人们接受并应用到各种领域。  NMF的基本思想可以简单描述为:对于...
  • 计算灰度共生矩阵GLCM

    万次阅读 热门讨论 2011-11-18 14:07:38
    灰度共生矩阵  灰度共生矩阵定义为像素对的联合分布概率,是一个对称矩阵,它不仅反映图像灰度在相邻的方向、相邻间隔、变化幅度的综合信息,但也反映了相同的灰度级像素之间的位置分布特征,是计算纹理特征的...
  • 空间,时间局部性原理的具体应用

    千次阅读 2015-02-28 11:40:56
    摘要:该文就数值运算中常见的矩阵乘法运算的实现算法展开讨论,从时间和空间不同角度分析矩阵乘法运算中影响性能的主要因素,改良了原有算法,提出了基于存储优先的数据访问方式,并结合当今比较热门的并行运算机制,提高...
  • 灰度共生矩阵(GLCM)

    2016-04-05 15:01:27
    灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图像的局部模式和它们排列规则的基础。 对于灰度共生矩阵的理解,需要明确几个概念:方向,偏移量和灰度共生矩阵的阶数。 计算机数
  • 图像局部特征提取

    千次阅读 2019-10-02 20:33:42
    其中局部特点具有很好的稳定性,不容易受外界环境的干扰。图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,566
精华内容 7,826
关键字:

局部稳定性矩阵