矩阵及其计算

一、基本概念

概念:

m × n个数a_{ij}排成的mn列的数表称为mn列的矩阵,简称m × n矩阵,记作:

实数域上的矩阵叫实矩阵,复数域上的矩阵叫复矩阵;通常用大写黑体字母\mathbf{A}\mathbf{B},…或(a_{ij})(b_{ij})表示矩阵。若指明矩阵的行数列数,写为A_{m×n}A=(a_{ij})_{m×n}

数域F上的全体m×n的矩阵记为F^{m×n}

常见种类:

  1. 系数矩阵

  1. 增广矩阵

  1. 零矩阵(O_{m×n}O

  1. n阶矩阵(m=n时)

  2. 行矩阵和列矩阵(1×nm×1

  3. 对角矩阵和单位矩阵

对角矩阵是一个主对角线之外的元素皆为0的矩阵,对角线上的元素可以为0或其他值,对角线上元素相等的对角矩阵称为数量矩阵(kI);对角线上元素全为1的对角矩阵称为单位矩阵

  1. 上三角矩阵和下三角矩阵

(1) 上三角矩阵

主对角线以下都是0的方阵称为上三角矩阵。

性质:

① 上三角矩阵的行列式为对角线元素相乘;

② 上三角矩阵乘以系数后也是上三角矩阵;

③ 上三角矩阵间的加减法和乘法运算的结果仍是上三角矩阵;

④ 上三角矩阵的逆矩阵也仍然是上三角矩阵。

这些事实说明:所有上三角矩阵的集合以及相应的运算构成一个方形矩阵集合的一个子代数。

(2) 下三角矩阵

一个矩阵称为下三角矩阵如果对角线上方的元素全部为0。

性质:

① 两个下三角矩阵的和下三角。

② 两个下三角矩阵的乘积是下三角。

③ 一个可逆的下三角矩阵的逆是下三角。

④ 下三角矩阵与常数相乘是一个下三角矩阵。

(3) 严格上(下)三角矩阵

若上(下)三角矩阵对角线元素全是0,则称为严格上(下)三角矩阵。

  1. 原子三角矩阵

一个原子下(上)三角矩阵是矩阵的一种特殊形式,所有的地方非对角元素为零,除了在单个列的条目。这样一个矩阵也被称为弗罗贝尼乌斯矩阵,高斯矩阵或高斯变换矩阵。

二、矩阵的线性计算

基础:

如果AB都是m×n矩阵,就称AB为同型矩阵;如果对应元素相等,记为A=B

矩阵的加减法数乘统称为矩阵的线性计算

线性计算的性质:

1.A+B=B+A

2.(A+B)+C=A+(B+C)

3.A+O=A

4.A+(-A)=O

5.1A=A

6.k(lA)=(kl)A

7.k(A+B)=kA+kB

8.(k+l)A=kA+lA

计算:

  1. 矩阵的加法(减法)

只有同型矩阵才能相加,矩阵之和仍是同型矩阵。

A负矩阵记为-A,显然A+(-A)=O

A-B=O \Leftrightarrow A=B

代码实现:

//该代码为矩阵加法,减法同理
#include <iostream>
using namespace std;
const int N=1e4+1;
int a[N][N];
int main()
{
    int m,n;
    cin>>m>>n;
    cout<<"A=\n";
    for(int i=1;i<=m;++i)
        for(int j=1;j<=n;++j)
            cin>>a[i][j];
    cout<<"B=\n";
    for(int i=1;i<=m;++i)
        for(int j=1,k=0;j<=n;a[i][j]+=k,++j)
            cin>>k;
    cout<<"C=A+B=\n";
    for(int i=1;i<=m;cout<<endl,++i)
        for(int j=1,k=0;j<=n;++j)
            cout<<a[i][j]<<' ';
    return 0;
} 
  1. 矩阵的数乘

矩阵Ak的乘积,记为kA

代码与上面大同小异,故不再列出。

  1. 矩阵的乘法

定义:

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义。

条件:

(1)A的列数必须等于B的行数

(2)乘积C的行数等于A的行数,列数等于B的列数

(3)乘积C中第ij列处的元素等于A的第i行与B的第j

性质:

① 一般AB\neq BA,但在以下情况中满足

AA ^{*} = A^{*} AA伴随矩阵相乘满足交换律。

AE=EAA单位矩阵数量矩阵满足交换律。

② 乘法结合律:(AB)C=A(BC)

③ 乘法左分配律:(A+B)C=AC+BC

④ 乘法右分配律:C(A+B)=CA+CB

⑤ 对数乘的结合性k(AB)=(kA)B=A(kB)

⑥ 转置 (AB)^{T}=B^{T}A^{T}

I_{m}A_{m \times n}=A_{m \times n} \\ A_{m \times n}I_{n}=A_{m \times n}

注意:

AB=O \not{\Rightarrow} A=O或B=O

例如:


=O

AB=AC \not{\Rightarrow} B=C

代码实现:

#include <iostream>
using namespace std;
const int N=1e4+1;
int a[N][N],b[N][N];
int main()
{
    int m,n,p,q;
    cin>>m>>n;
    cout<<"A=\n";
    for(int i=1;i<=m;++i)
        for(int j=1;j<=n;++j)
            cin>>a[i][j];
    cin>>p>>q;
    if(n!=p)
    {
        cout<<"WTF?\n";
        return 0;
    }
    cout<<"B=\n";
    for(int i=1;i<=p;++i)
        for(int j=1;j<=q;++j)
            cin>>b[i][j];
    for(int i=1;i<=m;cout<<endl,++i)
        for(int j=1;j<=q;++j)
        {
            int ans=0;
            for(int k=1;k<=n;++k)
                ans+=(a[i][k]*b[k][j]);
            cout<<ans<<' ';
        }
    return 0;
}

除此之外还有(遇到了再细说 o( ̄ε ̄*)):

① 哈达马积(对应元素相乘)

② 克罗内克积(任意矩阵相乘)

  1. 矩阵的乘方(类似于矩阵乘法)

定义:

An阶方阵,k为正整数,定义

注意:

A^{m}A^{k}=A^{m+k}

(A^{m})^{k}=A^{mk}

③ 当AB=BA时,(AB)^{k}=A^{k}B^{k}=B^{k}A^{k},但其逆不真

三、矩阵的转置

定义:

把一个矩阵A行列互换,所得到的矩阵称为A的转置,记为A^{T}

如果A=A^{T},则该矩阵为对称矩阵

如果A^{T}=-A,则该矩阵为反称矩阵

规律:

(A^{T})^{T}=A

(A+B)^{T}=A^{T}+B^{T}

(kA)^{T}=kA^{T}

(AB)^{T}=B^{T}A^{T} (注意)