数论——矩阵


先了解一下小常识

矩阵

定义

在数学中,矩阵(Matrix)是一个按照长方阵列排列的实数或复数集合,最早来自于方程组的系数及常数所构成的方阵。
矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题。在物理学中,矩阵在电路学、力学、光学和量子物理中都有应用。在计算机学科中,三维动画制作也需要用到矩阵。 ——G老师的 P o w e r   P o i n t Power\ Point Power Point

m × n m×n m×n个数 a i j a_{ij} aij排成的 m m m n n n列的数表称为 m m m n n n列的矩阵,简称 m × n m×n m×n矩阵。记作:
m × n m×n m×n个数称为矩阵 A A A的元素,简称。数 a i j a_{ij} aij位于矩阵 A A A的第 i i i行第j列,称为矩阵 A A A(i,j),以数 a i j a_{ij} aij ( i , j ) (i,j) (i,j)元的矩阵可记为 ( a i j ) (a_{ij}) (aij) ( a i j ) m × n (a_{ij})_{m×n} (aij)m×n m × n m×n m×n矩阵 A A A也记作 A m n A_{mn} Amn
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于 n n n的矩阵称为 n n n阶矩阵或 n n n阶方阵。 n n n阶方阵中所有 i = j i=j i=j的元素 a i j a_{ij} aij组成的斜线称为(主)对角线,所有 i + j = n + 1 i+j=n+1 i+j=n+1的元素 a i j a_{ij} aij组成的斜线称为辅对角线。 ——G老师的 P o w e r   P o i n t Power\ Point Power Point

基本运算

矩阵的基本运算包括加法减法数乘(不是乘法)转置共轭共轭转置等。

加法,减法

对于两个同型(行列数一样)矩阵 A A A B B B,加法就是把对应 ( i , j ) (i,j) (i,j)元做加法运算。
例:
[ 1 2 3 − 1 − 2 − 3 ] + [ 3 2 1 − 3 − 2 − 1 ] = [ 4 4 4 − 4 − 4 − 4 ] \begin{bmatrix}1&2&3\\-1&-2&-3\end{bmatrix}+\begin{bmatrix}3&2&1\\-3&-2&-1\end{bmatrix}=\begin{bmatrix}4&4&4\\-4&-4&-4\end{bmatrix} [112233]+[332211]=[444444]
矩阵的加法运算满足结合律交换律,即:
A + B = B + A ( A + B ) + C = A + ( B + C ) A+B=B+A\\ (A+B)+C=A+(B+C) A+B=B+A(A+B)+C=A+(B+C)

同理,减法也是这样的:
[ 1 2 3 − 1 − 2 − 3 ] − [ 3 2 1 − 3 − 2 − 1 ] = [ − 2 0 2 2 0 − 2 ] \begin{bmatrix}1&2&3\\-1&-2&-3\end{bmatrix}-\begin{bmatrix}3&2&1\\-3&-2&-1\end{bmatrix}=\begin{bmatrix}-2&0&2\\2&0&-2\end{bmatrix} [112233][332211]=[220022]

数乘

矩阵的数乘是指一个数乘以一个矩阵,只要把这个数乘到每一个 ( i , j ) (i,j) (i,j)元上。
例: 2 ∗ [ 3 2 1 − 3 − 2 − 1 ] = [ 6 4 2 − 6 − 4 − 2 ] 2*\begin{bmatrix}3&2&1\\-3&-2&-1\end{bmatrix}=\begin{bmatrix}6&4&2\\-6&-4&-2\end{bmatrix} 2[332211]=[664422]
矩阵的数乘运算满足结合律分配率,即:
( λ μ ) A = λ ( μ A ) ( λ + μ ) A = λ A + μ A λ ( A + B ) = λ A + λ B (\lambda \mu )A=\lambda (\mu A)\\ (\lambda +\mu )A=\lambda A+\mu A\\ \lambda (A+B)=\lambda A+\lambda B (λμ)A=λ(μA)(λ+μ)A=λA+μAλ(A+B)=λA+λB

矩阵的加法、减法和数乘运算合称为矩阵的“线性”运算

转置

把矩阵 A A A的行换成同序数的列所得到的新矩阵称为 A A A的转置矩阵,这一过程称为矩阵的转置。

[ 1 2 3 − 1 − 2 − 3 ] T = [ 1 − 1 2 − 2 3 − 3 ] \begin{bmatrix}1&2&3\\-1&-2&-3\end{bmatrix}^T=\begin{bmatrix}1&-1\\2&-2\\3&-3\end{bmatrix} [112233]T=123123
显然有 ( A T ) T = A ( λ A ) T = λ A T ( A B ) T = A T B T (A^T)^T=A\\(\lambda A)^T=\lambda A^T\\(AB)^T=A^T B^T (AT)T=A(λA)T=λAT(AB)T=ATBT

共轭,共轭转置

这个不常用就直接发图片了吧(Pia~Pia
在这里插入图片描述

行列式

一个 n × n n×n n×n方阵 A A A的行列式记为 det ⁡ ( A ) \det(A) det(A)或者 ∣ A ∣ |A| A,一个 2 × 2 2×2 2×2矩阵的行列式可表示如下:
d e t [ a b c c ] = a d − b c det\begin{bmatrix}a&b\\c&c\end{bmatrix}=ad-bc det[acbc]=adbc
把一个 n n n阶行列式中的元素 a i j a_{ij} aij所在的第i行和第j列划去后,留下来的 n − 1 n-1 n1阶行列式叫做元素 a i j a_{ij} aij的余子式,记作 M i j M_{ij} Mij。记 A i j = ( − 1 ) i + j M i j A_{ij}=(-1)^{i+j}M_{ij} Aij=(1)i+jMij,叫做元素 a i j a_{ij} aij的代数余子式。例如:
D = [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ] M 23 = [ a 11 a 12 a 14 a 31 a 32 a 34 a 41 a 42 a 44 ] D=\begin{bmatrix}a_{11}&a_{12}&a_{13}&a_{14}\\a_{21}&a_{22}&a_{23}&a_{24}\\a_{31}&a_{32}&a_{33}&a_{34}\\a_{41}&a_{42}&a_{43}&a_{44}\end{bmatrix}\quad\quad\quad\quad\quad M_{23}=\begin{bmatrix}a_{11}&a_{12}&a_{14}\\a_{31}&a_{32}&a_{34}\\a_{41}&a_{42}&a_{44}\end{bmatrix} D=a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44M23=a11a31a41a12a32a42a14a34a44
A 23 = ( − 1 ) 2 + 3 M 23 = − M 23 A_{23}=(-1)^{2+3}M_{23}=-M_{23} A23=(1)2+3M23=M23
一个 n × n n×n n×n矩阵的行列式等于其任意行(或列)的元素与对应的代数余子式乘积之和,即:
det ⁡ ( A ) = ∑ j = 1 n a i j ( − 1 ) i + j det ⁡ ( A i j ) \det(A)=\sum_{j=1}^n a_{ij}(-1)^{i+j}\det(A_{ij}) det(A)=j=1naij(1)i+jdet(Aij)

栗子:已知方阵 A = [ 1 2 3 4 5 6 7 8 9 ] A=\begin{bmatrix}1&2&3\\4&5&6\\ 7&8&9\end{bmatrix} A=147258369,求 ∣ A ∣ |A| A det ⁡ ( A ) \det(A) det(A)
解: det ⁡ ( A ) = 1 ∗ ( − 1 ) 2 ∗ [ 5 6 8 9 ] + 2 ∗ ( − 1 ) 3 ∗ [ 4 6 7 9 ] + 3 ∗ ( − 1 ) 4 ∗ [ 4 5 7 8 ] = 1 ∗ ( − 3 ) + ( − 2 ) ∗ ( − 6 ) + 3 ∗ ( − 3 ) = 0 \det(A)=1*(-1)^2 *\begin{bmatrix}5&6\\8&9\end{bmatrix}+ 2*(-1)^3*\begin{bmatrix}4&6\\ 7&9\end{bmatrix}+3*(-1)^4*\begin{bmatrix}4&5\\ 7&8\end{bmatrix}=1*(-3)+(-2)*(-6)+3*(-3)=0 det(A)=1(1)2[5869]+2(1)3[4769]+3(1)4[4758]=1(3)+(2)(6)+3(3)=0

所以明显可以用递归解决……

矩阵和行列式的区别

  1. 矩阵是一个表格,行数和列数可以不一样;而行列式是一个数,且行数必须等于列数。只有方阵才可以定义它的行列式,而对于长方阵不能定义它的行列式。
  2. 两个矩阵相等是指对应元素都相等;两个行列式相等不要求对应元素都相等,甚至阶数也可以不一样,只要运算代数和的结果一样就行了。
  3. 两矩阵相加是将各对应元素相加;两行列式相加,是将运算结果相加,在特殊情况下(比如有行或列相同),只能将一行(或列)的元素相加,其余元素照写。
  4. 数乘矩阵是指该数乘以矩阵的每一个元素;而数乘行列式,只能用此数乘行列式的某一行或列,提公因数也如此。
  5. 矩阵经初等变换,其秩不变;行列式经初等变换,其值可能改变:换法变换要变号,倍法变换差倍数;消法变换不改变。

矩阵乘法

对于两个矩阵: n n n m m m列的 A A A m m m p p p列的 B B B,可以定义 C = A × B C=A\times B C=A×B
C C C是一个 n n n p p p列的矩阵,且 C i , j = ∑ k = 1 m A i , k × B k , j C_{i,j}=\sum_{k=1}^mA_{i,k}\times B_{k,j} Ci,j=k=1mAi,k×Bk,j
栗子:下面两个矩阵的乘积 [ 1 2 3 3 4 5 ] [ 1 2 3 4 3 4 5 6 5 6 7 8 ] \begin{bmatrix}1&2&3\\3&4&5\end{bmatrix}\quad\quad\quad\begin{bmatrix}1&2&3&4\\3&4&5&6\\5&6&7&8\end{bmatrix} [132435]135246357468
[ 1 ∗ 1 + 2 ∗ 3 + 3 ∗ 5 1 ∗ 2 + 2 ∗ 4 + 3 ∗ 6 1 ∗ 3 + 2 ∗ 5 + 3 ∗ 7 1 ∗ 4 + 2 ∗ 6 + 3 ∗ 8 3 ∗ 1 + 4 ∗ 3 + 5 ∗ 5 3 ∗ 2 + 4 ∗ 4 + 5 ∗ 6 3 ∗ 3 + 4 ∗ 5 + 5 ∗ 7 3 ∗ 4 + 4 ∗ 6 + 5 ∗ 8 ] \begin{bmatrix}1*1+2*3+3*5&1*2+2*4+3*6&1*3+2*5+3*7&1*4+2*6+3*8\\3*1+4*3+5*5&3*2+4*4+5*6&3*3+4*5+5*7&3*4+4*6+5*8\end{bmatrix} [11+23+3531+43+5512+24+3632+44+5613+25+3733+45+5714+26+3834+46+58]
[ 22 28 34 40 40 52 64 76 ] \begin{bmatrix}22&28&34&40\\40&52&64&76\end{bmatrix} [2240285234644076](啊真是难算)
矩阵乘法满足 A ( B C ) = ( A B ) C ( A + B ) C = A C + B C C ( A + B ) = A C + B C A(BC)=(AB)C\\(A+B)C=AC+BC\\C(A+B)=AC+BC A(BC)=(AB)C(A+B)C=AC+BCC(A+B)=AC+BC
特别地,当 A , B A,B A,B为方阵时, A B = B A AB=BA AB=BA

板子

int n, m, p;
struct Matrix{
    int n, m;
    long long A[101][101];
    inline Matrix() { memset(A, 0, sizeof A); }
    inline void input() {
        for(reg int i = 1; i <= n; i++)
            for(reg int j = 1; j <= m; j++) cin >> A[i][j];
    }
    inline void output() {
        for(reg int i = 1; i <= n; i++) {
            for(reg int j = 1; j <= m; j++) {
                cout << A[i][j];
                if(j != m) cout << ' ';
            }
            cout << endl;
        }
    }
    inline Matrix operator * (const Matrix&rhs) {
        Matrix ans;
        ans.n = n; ans.m = rhs.m;
        for(reg int i = 1; i <= n; i++)
            for(reg int j = 1; j <= rhs.m; j++)
                for(reg int k = 1; k <= m; k++)
                    ans.A[i][j] += A[i][k] * rhs.A[k][j];
        return ans;
    }
}a, b;
  
int main() {
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin >> n >> m;
    a.n = n; a.m = m;
    a.input();
    cin >> p;
    b.n = m; b.m = p;
    b.input();
    Matrix c = a * b;
    c.output();
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值