分类 数学 | math 下的文章

[scode type="blue"]如果行内公式没渲染请刷新页面[/scode]
贝塞尔曲线

贝塞尔曲线(Bézier Curve)是一种在计算机图形学,图形设计软件(如 Adobe Illustrator)、动画制作、字体设计等领域中广泛使用的参数曲线,常用于设计平滑的曲线路径。

本文将介绍贝塞尔曲线的基本原理,公式推导。

贝塞尔曲线的基本原理

贝塞尔曲线由一组控制点定义。最常见的是一次、二次和三次贝塞尔曲线。

所以我们只介绍一次、二次和三次贝塞尔曲线。

贝塞尔曲线是通过一组有序控制点定义的参数函数,该函数将参数 t 映射到曲线上的空间点。

一次贝塞尔曲线

在平面中两个点可以确定一条线段,那么我们怎么表示线段上的任意一个点呢?

假设平面中存在任意两个点$\mathbf{P_1},\mathbf{P_2}$(注:这里的点指的是向量)

那么线段$\mathbf{P_2-P_1}$上的任意一个点$\mathbf{P}$的模长应该满足

$$ ||\mathbf{P_1}||\le||\mathbf{P}||\le||\mathbf{P_2}|| $$

且方向与$\mathbf{P_1}$的方向一致

那么$\mathbf{P}$可以由$\mathbf{P_1}$,$\mathbf{P_2-P_1}$和一个参数 $t$ 来决定

$$ \mathbf{P}=\mathbf{P_1}+t(\mathbf{P_2-P_1}),0\le t\le 1 $$

$\mathbf{P_1}$确定初始位置,$t(\mathbf{P_2-P_1})$控制范围

变换一下有

$$ \mathbf{P}=(1-t)\mathbf{P_1}+t\mathbf{P_2},0\le t\le 1 $$

对图形学熟悉的一眼能看出来这个公式是一个线性插值公式,也就是 lerp 表达式

标准lerp表达式为

$$ lerp(a,b,t) = (1-t)a+tb $$

二次贝塞尔曲线

两个点可以确定一个线段,那么三个点就可以确定两个线段,这样我们可以得到两个一次贝塞尔曲线。

假设平面上有三个点$\mathbf{P_1},\mathbf{P_2},\mathbf{P_3}$

那么我们可以的到两个lerp表达式

$$ lerp(\mathbf{P_1},\mathbf{P_2},t),\quad0\le t\le 1 $$

$$ lerp(\mathbf{P_2},\mathbf{P_3},t),\quad0\le t\le 1 $$

给定任意 $t$ 我们可以确定两个点$\mathbf{P_4},\mathbf{P_5}$

当我们 $t$ 取不同的值时$\mathbf{P_4},\mathbf{P_5}$的位置也会随之变化,如果我们将$\mathbf{P_4},\mathbf{P_5}$连接起来我们又会的到一条线段记作 $l$ ,很显然我们又得到一条lerp表达式

$$ lerp(\mathbf{P_4},\mathbf{P_5},t),\quad0\le t\le 1 $$

当我们的 $t$ 从0 到 1 取遍每一个数,那么线段 $l$ 也会随之动起来,当你把所有取不同数得到的 $l$ 画出来你会发现某个点的轨迹是一条曲线。

这个点的轨迹正是(注:$\mathbf{P_4},\mathbf{P_5}$是动点)

$$ lerp(\mathbf{P_4},\mathbf{P_5},t),\quad0\le t\le 1 $$

$$ lerp(lerp(\mathbf{P_1},\mathbf{P_2},t),lerp(\mathbf{P_2},\mathbf{P_3},t),t),\quad0\le t\le 1 $$

我们将表达式写出来

$$ \mathbf{P} = (1-t)[(1-t)\mathbf{P_1}+t\mathbf{P_2}]+t[(1-t)\mathbf{P_2}+t\mathbf{P_3}],\quad0\le t\le 1 $$

化简

$$ \mathbf{P} = (1-t)^2\mathbf{P_1}+2t(1-t)\mathbf{P_2}+t^2\mathbf{P_3},\quad0\le t\le 1 $$

这就是二次贝塞尔曲线

三次贝塞尔曲线

与二次贝塞尔曲线同理,4个点可以确定三条选段,得到三个lerp表达式

,这三个表达式可以确定3个点,这就退化到二次贝塞尔曲线了。

所以通过相同方式的推导我们可以的到三次贝塞尔曲线公式

$$ B(t) = (1-t)^3 P_0 + 3(1-t)^2 t P_1 + 3(1-t) t^2 P_2 + t^3 P_3, \quad t \in [0,1] $$

碰撞约束

在碰撞分离阶段除了使用碰撞法线直接分离物体之外,还有一种广泛用于各大刚体模拟引擎中的方法——碰撞约束。使用碰撞约束可以更加优雅的分离物体。

通过之前《物理引擎中的约束》这篇文章我们了解到我们只需要写出我们需要的约束方程,然后找出Jacobian矩阵就可以通过之前那篇文章最后导出的公式求解冲量了。接下来我们将介绍解释碰撞约束的约束方程和推导Jacobian矩阵。

碰撞约束的约束方程

假设物体A与物体B发生碰撞

想一想我们需要什么效果,我们希望物体A与物体B满足分离状态,我们需要使用符号表示出这个状态。这里再次给出约束方程的含义:约束方程是用于描述一个系统中各部件之间相对运动限制的数学表达式。通过这些方程,我们可以定义哪些运动是允许的,哪些是被禁止的。即当方程中的参数满足约束方程我们就不必调整物体状态,否则我们需要调整物体状态。

所以我们可以这么定义碰撞约束的位置约束方程

$$ C = (\mathbf{P}_a-\mathbf{P}_b)\cdot\mathbf{n}\ge0 $$

这个方程表示两点在法向方向上不能穿透(距离 ≥ 0),但可以分离(距离 > 0)或者接触(距离=0)。还可以这么理解当两个物体穿透的时候$$\mathbf{P}_a-\mathbf{P}_b$$与法线的点积小于0(不满足约束方程)剩下的情况( ≥ 0)就是满足约束的情况了。

找到约束方程后我们还需要找到Jacobian矩阵

Jacobian矩阵

还记得我们《物理引擎中的约束》中提到的我们找到位置约束方程后,我们还需要对时间求导,得到速度约束方程。

对上面得到的碰撞约束方程对时间求一阶导数得到速度约束方程

$$ \dot{C} = \mathbf{n}\cdot\frac{d}{dt}\mathbf{P}_a- \mathbf{n}\cdot\frac{d}{dt}\mathbf{P}_b $$

  • $ \frac{d}{dt}\mathbf{P}_a$就是碰撞点a的速度
  • $ \frac{d}{dt}\mathbf{P}_b$就是碰撞点b的速度

容易得到点a的速度为

$$ \frac{d}{dt}\mathbf{P}_a=\mathbf{v}_a+(\omega_a\times\mathbf{r}_a) $$

容易得到点b的速度为

$$ \frac{d}{dt}\mathbf{P}_b=\mathbf{v}_b+(\omega_b\times\mathbf{r}_b) $$

带入速度约束方程化简有

$$ \dot{C} = \mathbf{n}\cdot\mathbf{v}_a+\omega_a\cdot(\mathbf{r}_a\times\mathbf{n})-\mathbf{n}\cdot\mathbf{v}_b-\omega_b\cdot(\mathbf{r}_b\times\mathbf{n}) $$

我们将其写成矩阵的形式

$$ \dot{C} = \begin{bmatrix} \mathbf{n} & \mathbf{r}_a\times\mathbf{n} & -n &-\mathbf{r}_b\times\mathbf{n} \end{bmatrix}\begin{bmatrix} \mathbf{v}_a \\ \omega_a\\ \mathbf{v}_b \\ \omega_b \end{bmatrix} $$

其中Jacobian就是

$$ J=\begin{bmatrix} \mathbf{n} & \mathbf{r}_a\times\mathbf{n} & -n &-\mathbf{r}_b\times\mathbf{n} \end{bmatrix} $$

注:Jacobian是我们最后应用不同物体冲量的方向例如

a->ApplyImpulseLinear(Vec2(Jacobian[0]*lambda, Jacobian[1]*lambda)); 
a->ApplyImpulseAngular(Jacobian[2]*lambda);                   
b->ApplyImpulseLinear(Vec2(Jacobian[3]*lambda, Jacobian[4]*lambda)); b->ApplyImpulseAngular(Jacobian[5]*lambda);           

求解冲量大小

根据我们的《物理引擎中的约束》最后的得到的方程我们可以解出冲量

$$ \lambda = -(JM^{-1}J^{T})^{-1}(JV) $$

带bias系数的形式

$$ \lambda = -(JM^{-1}J^{T})^{-1}(JV+b) $$

其中V为

$$ V=\begin{bmatrix} v_{ax} \\ v_{ay}\\ \omega_a\\ v_{bx} \\ v_{by} \\ \omega_b \end{bmatrix} $$

M的逆为

$$ M^{-1} = \begin{bmatrix} \frac{1}{m_a} & & & & & \\ & \frac{1}{m_a} & & & & \\ & & \frac{1}{I_a} & & & \\ & & & \frac{1}{m_b} & & \\ & & & & \frac{1}{m_b} & \\ & & & & &\frac{1}{I_b} \end{bmatrix} $$

JV是一个数,$JM^{-1}J^{T}$也是一个数,所以求出来$\lambda$也是一个数我们的公式是正确的

注:这里可以使用高斯-赛德尔(Gauss-Seidel)方法求解线性方程组

基本线性代数

一名普通本科生的线代学习记录

行列式

行列式(Determinant),记作det(A)或者|A|,行列式一开始提出来是为了解线性方程组,在矩阵概念的引入后使得更多有关行列式的性质被发现,行列式在许多领域都逐渐显现出重要的意义和作用。

定义

行列式是一个n*n的数组成的数表,其中数有n列n行,表示为

$$ \begin{array}{c} det(A)= \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ a_{21} &a_{22} &... &a_{2n} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix} \end{array} $$

被称为n阶行列式

行列式的值是一个标量,他是由标量运算所定义的。如一个二阶行列式按照行列式的定义写成

$$ \begin{array}{c} \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a & b\\ c &d\end{vmatrix} = ad-cb \end{array} $$

一个三阶行列式按照行列式的定义写成

$$ \begin{array}{c} \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a & b & c\\ d & e & f\\ g & h & i\\ \end{vmatrix} = aei+bfg+dhc-ceg-bdi-hfa \end{array} $$

在我们给出行列式的定义之前先介绍一下排列逆序数

排列

排列就是由1,2,3,...,n这n个自然数的任意组合.

如1,3,2,4是一个4级排列

1,3,4并不是一个排列,缺少了2这个自然数

逆序数

一个按照1,2,3,...,n顺序组成的排列叫做自然顺序排列,其逆序数为0

按照n,n-1,n-2,....1顺序组成的排列叫做逆序排列,其逆序数为n(n-1)/2

一个4级排列1,3,4,2的逆序数为2

$$ \begin{array}{c} 一般用\sigma (p_1p_2p_3...p_n)表示p_1p_2p_3...p_n这个排列的逆序数 \end{array} $$

n阶行列式的定义

n阶行列式按照行列式的定义写成

$$ \begin{array}{c} det(A)= \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ a_{21} &a_{22} &... &a_{2n} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix}= \sum_{p_1p_2p_3...p_n}^{} sgn(\sigma)a_{1p_1} a_{2p_2} a_{3p_3}... a_{np_n} \\ 其中p_1p_2p_3...p_n为任意一个n级排列\\ sgn是符号函数具体是sgn(x)=\begin{cases} -1 &x>0\\ 0 & x=0\\ 1 &x>0 \end{cases} \end{array} $$

主/副对角线

主对角线是指由数表左上角到右下角的一条线段,副对角线是指由右上角到左下角的一条线段。

行列式的转置

行列式的转置就是将列写为行,行写为列(或者是将行列式的元素按照主对角线进行一次镜面交换),记作

$$ |A|^T $$

$$ \begin{array}{c} \begin{vmatrix} a_{11} & a_{12} & ... & a_{1(n-1)}&a_{1n}\\ a_{21} & a_{22} & ... & a_{2(n-1)}&a_{2n}\\ ... & ...& ...& ...&...\\ a_{(n-1)1} & a_{(n-1)2} & ... & a_{(n-1)(n-1)}&a_{(n-1)n}\\ a_{n1} & a_{n2} & ... & a_{n(n-1)}&a_{nn} \end{vmatrix}^T=\begin{vmatrix} a_{11} & a_{21} & ... & a_{(n-1)1} &a_{n1}\\ a_{12} & a_{22} & ... & a_{(n-1)2} &a_{n2}\\ ... & ...& ...& ...&...\\ a_{1(n-1)} & a_{2(n-1)} & ... & a_{(n-1)(n-1)}&a_{n(n-1)}\\ a_{1n} & a_{2n} & ... & a_{(n-1)n} &a_{nn} \end{vmatrix} \end{array} $$

行列式转置后的值与原行列式相等

行列式的性质

这里介绍常用的三个

性质1:把行列式上某两列或者某两行交换位置,行列式变为原来的相反数。

$$ \begin{array}{c} \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix}=-\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix} \end{array} $$

性质2:行列式上某行或者某列上存在公倍数可以提到行列式外面去。

$$ \begin{array}{c} \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &...\\ ka_{i1} &ka_{i2} &... &ka_{in} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix}=k\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &...\\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix} \end{array} $$

性质3:把行列式上某行(列)的值乘一个倍数加到另一行(列)上去行列式的值不变。

$$ \begin{array}{c} \begin{vmatrix} A \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix}=\begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1}+ka_{j1} &a_{i2}+a_{j2} &... &a_{in}+a_{jn} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix} \end{array} $$

行列式按行按列展开

余子式

$$ \begin{array}{c} 对一个n阶的行列式M,去掉M的第i行第j列后形成的n−1阶的行列式\\叫做M关于元素m_{ij}的\mathbf{余子式},记作M_{ij}。\\ M_{ij} = \begin{vmatrix} a_{11} &... &a_{1(j-1)} &a_{1(j+1)} &... &a_{1n} \\ ... &... &... &... &... &... \\ a_{(i-1)1} &... &a_{(i-1)(j-1)} &a_{(i-1)(j+1)} &... &a_{(i-1)n} \\ a_{(i+1)1} &... &a_{(i+1)(j-1)} &a_{(i+1)(j+1)} &... &a_{(i+1)n} \\ ... &... &... &... &... &... \\ a_{nn} &... &a_{n(j-1)} &a_{n(j+1)} &... &a_{nn} \end{vmatrix} \end{array} $$

代数余子式

$$ M关于元素m_{ij}的\mathbf{代数余子式}记作C_{ij} = (-1)^{i+j}M_{ij} $$

一个n阶的行列式M可以写成一行(或一列)的元素与对应的代数余子式的乘积之和,叫作行列式按一行(或一列)的展开。

$$ \begin{array}{c} det(A) = \sum_{i=1}^{n} a_{ij}C_{ij}\\ det(A) = \sum_{j=1}^{n} a_{ij}C_{ij} \end{array} $$

这个公式又称拉普拉斯(Laplace)公式(拉普拉斯展开),把n维矩阵的行列式计算变为了n个n−1。

克莱姆法则 Cramer's law

有了n阶行列式我们就可以使用Cramer法则去计算一个非奇异线性方程组(方程个数与未知数个数相等且系数行列式非零的线性方程组)

对于如下方程组

$$ \begin{array}{c} \begin{cases} a_{11}x_1+a_{12}x_x+...+a_{1n}x_n=b_1 \\ a_{21}x_1+a_{22}x_x+...+a_{2n}x_n=b_2 \\ \qquad \qquad \qquad ..... \\ a_{n1}x_1+a_{n2}x_x+...+a_{nn}x_n=b_n \end{cases}\\ 其中det(A) = \begin{vmatrix} a_{11} &a_{12} &... &a_{1n} \\ a_{21} &a_{22} &... &a_{2n} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{vmatrix}\ne 0 \end{array} $$

克莱姆法则说明:

$$ \begin{array}{c} det(A)≠0,那么方程组的x_i=\frac{|A_i|}{|A|}\\ |A_{i}|是|A|的第i列a_{1i},a_{2i},...,a_{ni}替换为b_1,b_2,...,b_n后得到的行列式。 \end{array} $$

矩阵

矩阵matrix)是一个由m行(row)n列(column)个元素组成的矩形阵列。记作

$$ M_{mn}=\begin{bmatrix} a_{11} & a_{12} &... &a_{1n} \\ a_{21} & a_{22} &... &a_{2n}\\ ...& ... & ... & ...\\ a_{m1} & a_{m2} &... &a_{mn} \end{bmatrix} $$

其中的元素可以是数,字母,函数等。

特别的当m=n时成为n阶(m阶)方阵。

特殊矩阵

对称矩阵

当转置后的方阵等于转置前的方阵则该方阵称为对称矩阵

$$ A^{T}=A $$

对角矩阵

除了主对角线上的元素都等于0且对角线上的元素都不为0的方阵称为对角矩阵

$$ \begin{array}{c} M=\begin{bmatrix} a_{11} &0 &... &0 \\ 0&a_{22} & ...& 0\\ ...& ... & ... & ...\\ 0&0 &... &a_{nn} \end{bmatrix} \end{array} $$

数量矩阵

当对角矩阵上主对角线上的元素都相等时称为数量矩阵

$$ \begin{array}{c} M=\begin{bmatrix} a_{11} &0 &... &0 \\ 0&a_{22} & ...& 0\\ ...& ... & ... & ...\\ 0&0 &... &a_{nn} \end{bmatrix}\\ a_{11}=a_{22}=...=a_{nn} \end{array} $$

单位矩阵

当数量矩阵上主对角线上的元素都为1时称为单位矩阵

记为

$$ \begin{array}{c} E_{nn}=\begin{bmatrix} 1 &0 &... &0 \\ 0&1 & ...& 0\\ ...& ... & ... & ...\\ 0&0 &... &1 \end{bmatrix}\\ \end{array} $$

矩阵的运算

同形

当两个矩阵的行数列数相等时则称两个矩阵同形

$$ \begin{array}{c} A_{mn} ,B_{mn}同形 \end{array} $$

两个矩阵相等

当且仅当两个矩阵同形且对应位置的元素相等。

矩阵的加法

当且仅当两个矩阵同形可进行加法运算,且结果矩阵形状与运算矩阵相同

$$ \begin{array}{c} A_{mn}+B_{mn}=C_{mn} \end{array} $$

$$ \begin{bmatrix} a_{11} & a_{12} &... &a_{1n} \\ a_{21} & a_{22} &... &a_{2n}\\ ...& ... & ... & ...\\ a_{m1} & a_{m2} &... &a_{mn} \end{bmatrix}+\begin{bmatrix} b_{11} & b_{12} &... &b_{1n} \\ b_{21} & b_{22} &... &b_{2n}\\ ...& ... & ... & ...\\ b_{m1} & b_{m2} &... &b_{mn} \end{bmatrix}=\begin{bmatrix} a_{11}+b_{11} & a_{12}+b_{12} &... &a_{1n}+b_{1n} \\ a_{21}+b_{21} & a_{22}+b_{22} &... &a_{2n}+b_{2n}\\ ...& ... & ... & ...\\ a_{m1}+b_{m1} & a_{m2}+b_{m2} &... &a_{mn}+b_{mn} \end{bmatrix} $$

矩阵的数乘

$$ k\begin{bmatrix} a_{11} & a_{12} &... &a_{1n} \\ a_{21} & a_{22} &... &a_{2n}\\ ...& ... & ... & ...\\ a_{m1} & a_{m2} &... &a_{mn} \end{bmatrix}=\begin{bmatrix} ka_{11} & ka_{12} &... &ka_{1n} \\ ka_{21} & ka_{22} &... &ka_{2n}\\ ...& ... & ... & ...\\ ka_{m1} & ka_{m2} &... &ka_{mn} \end{bmatrix} $$

矩阵的减法

当且仅当两个矩阵同形可进行减法运算,且结果矩阵形状与运算矩阵相同

$$ \begin{bmatrix} a_{11} & a_{12} &... &a_{1n} \\ a_{21} & a_{22} &... &a_{2n}\\ ...& ... & ... & ...\\ a_{m1} & a_{m2} &... &a_{mn} \end{bmatrix}-\begin{bmatrix} b_{11} & b_{12} &... &b_{1n} \\ b_{21} & b_{22} &... &b_{2n}\\ ...& ... & ... & ...\\ b_{m1} & b_{m2} &... &b_{mn} \end{bmatrix}=\begin{bmatrix} a_{11} & a_{12} &... &a_{1n} \\ a_{21} & a_{22} &... &a_{2n}\\ ...& ... & ... & ...\\ a_{m1} & a_{m2} &... &a_{mn} \end{bmatrix}+(-1)\begin{bmatrix} b_{11} & b_{12} &... &b_{1n} \\ b_{21} & b_{22} &... &b_{2n}\\ ...& ... & ... & ...\\ b_{m1} & b_{m2} &... &b_{mn} \end{bmatrix} $$

矩阵的转置

操作与行列式类似,矩阵的转置就是将矩阵的列写为行,行写为列

记作

$$ M^T $$

$$ \begin{array}{c} \begin{bmatrix} a_{11} & a_{12} & ... & a_{1(n-1)}&a_{1n}\\ a_{21} & a_{22} & ... & a_{2(n-1)}&a_{2n}\\ ... & ...& ...& ...&...\\ a_{(m-1)1} & a_{(m-1)2} & ... & a_{(m-1)(n-1)}&a_{(m-1)n}\\ a_{nm1} & a_{m2} & ... & a_{m(n-1)}&a_{mn} \end{bmatrix}^T=\begin{bmatrix} a_{11} & a_{21} & ... & a_{(m-1)1} &a_{m1}\\ a_{12} & a_{22} & ... & a_{(m-1)2} &a_{m2}\\ ... & ...& ...& ...&...\\ a_{1(n-1)} & a_{2(n-1)} & ... & a_{(m-1)(n-1)}&a_{m(n-1)}\\ a_{1n} & a_{2n} & ... & a_{(m-1)n} &a_{mn} \end{bmatrix} \end{array} $$

注:矩阵的转置是一次变换操作,与原矩阵不相等

一些运算律:

$$ \begin{array}{c} A_{mn}+B_{mn}=B_{mn}+A_{mn}(交换律)\\ A_{mn}+(B_{mn}+C_{nm})=(A_{nm}+B_{nm})+C_{nm}(结合律)\\ k(A_{mn}+B_{nm})=kA_{mn}+kB_{nm}\\ (A_{mn}+B_{nm})^T=A_{mn}^T+B_{nm}^T \end{array} $$

矩阵的乘法:

矩阵的乘法当且仅当乘号左边的矩阵的列数等于右边矩阵的行数可以进行,结果矩阵的行数为乘号左边矩阵的行数,列数为乘号右边矩阵的列数

$$ \begin{array}{c} A_{nm}\times B_{mn}=C_{nn} \end{array} $$

$$ \begin{array}{c} \begin{bmatrix} a_{11} & a_{12} &... &a_{1m} \\ a_{21} & a_{22} &... &a_{2m}\\ ...& ... & ... & ...\\ a_{n1} & a_{n2} &... &a_{nm} \end{bmatrix}\times \begin{bmatrix} b_{11} & b_{12} &... &b_{1n} \\ b_{21} & b_{22} &... &b_{2n}\\ ...& ... & ... & ...\\ b_{m1} & b_{m2} &... &b_{mn} \end{bmatrix}=\begin{bmatrix} \sum_{i=1}^{m}a_{1i}b_{i1} &\sum_{i=1}^{m}a_{1i}b_{i2}&...&\sum_{i=1}^{m}a_{1i}b_{in} &\\ \sum_{i=1}^{m}a_{2i}b_{i1} &\sum_{i=1}^{m}a_{2i}b_{i2}&...&\sum_{i=1}^{m}a_{2i}b_{in} &\\ ...&...&...&... &\\ \sum_{i=1}^{m}a_{ni}b_{i1} &\sum_{i=1}^{m}a_{ni}b_{i2}&...&\sum_{i=1}^{m}a_{ni}b_{in} &\\ \end{bmatrix} \end{array} $$

矩阵乘法的运算律

$$ \begin{array}{c} A_{nm}B_{mn}不一定等于B_{mn}A_{nm}即一般不满足交换律\\ (A_{nm}B_{mn})C_{nk}=A_{nm}(B_{mn}C_{nk})(结合律)\\ A_{nm}(B_{mn}+C_{mn})=A_{nm}B_{mn}+A_{nm}C_{mn}(左分配律)\\ (B_{mn}+C_{mn})A_{nm}=B_{mn}A_{nm}+C_{mn}A_{nm}(右分配律) \end{array} $$

矩阵的逆

伴随矩阵

在介绍矩阵的逆之前先介绍一下矩阵的伴随矩阵

伴随矩阵记为

$$ A^*=\begin{bmatrix} A_{11} & A_{12} &... &A_{1n} \\ A_{21} & A_{22} &... &A_{2n}\\ ...& ... & ... & ...\\ A_{n1} & A_{n2} &... &A_{nn} \end{bmatrix}\\ 其中A_{ij}为A=(a_{ij})_{nn}中a_{ij}的余子式 $$

矩阵的逆

先介绍一下数域中的逆,对于任意一个复数z它的逆记为

$$ z^{-1}=\frac{1}{z},其中z\ne0\\ z^{-1}z=1 $$

那么类似的,矩阵的逆也满足类似的性质

$$ 对一个方阵A如果det(A)\ne0则称A可逆,记为A^{-1}\\ 且满足A^{-1}=\frac{1}{|A|}A^{*}\\ A^{-1}A=E,E为单位矩阵 $$

方阵的行列式不等于0是可逆的充要条件

分块矩阵

分块矩阵(Block Matrix)是线性代数中的一种重要工具,通过将一个较大的矩阵分割成若干较小的子矩阵(或称块),可以简化矩阵运算、分析和理解。下面详细解释分块矩阵的定义、性质及其应用。

定义

一个m n的矩阵A可以通过水平和垂直分割的方式被分成多个子矩阵,每个子矩阵称为。假设我们将矩阵A按行分为r个部分,按列分为c个部分,则得到一个r c的分块矩阵,其中每个块是一个子矩阵。

例如

$$ A = \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} $$

我们可以将其分块为:

$$ A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix} $$

其中

$$ A_{11} = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}, \quad A_{12} = \begin{pmatrix} a_{13} & a_{14} \\ a_{23} & a_{24} \end{pmatrix}, \quad A_{21} = \begin{pmatrix} a_{31} & a_{32} \\ a_{41} & a_{42} \end{pmatrix}, \quad A_{22} = \begin{pmatrix} a_{33} & a_{34} \\ a_{43} & a_{44} \end{pmatrix} $$

性质

分块矩阵具有许多有用的性质,这些性质使得它们在处理复杂矩阵问题时非常有用:

  1. 加法与乘法

    • 如果两个矩阵(A)和(B)具有相同的分块结构,则它们的加法可以直接在相应的块上进行:

      $$ (A + B)_{ij} = A_{ij} + B_{ij} $$

    • 对于分块矩阵的乘法,设(A)是(m \times n)的分块矩阵,(B)是(n \times p)的分块矩阵,并且它们的块之间满足适当的维度要求,则乘积(C = AB)的块(C

      $$ C_{ik} = \sum_{j=1}^r A_{ij} B_{jk} $$

      其中,(r)是中间维度的数量。

  2. 转置

    $$ 如果一个矩阵A被分块为A_{ij},则其转置矩阵A^T的块结构为: (A^T)_{ij} = (A_{ji})^T $$

  3. 行列式:对于某些特定类型的分块矩阵(如分块对角矩阵),计算行列式变得简单。例如,如果(A)是一个分块对角矩阵:

    $$ A = \begin{pmatrix} A_{11} & 0 \\ 0 & A_{22} \end{pmatrix} $$

    则其行列式为:

    $$ det(A) = det(A_{11}) \cdot det(A_{22}) $$

矩阵的初等变换

初等变换是指对一个矩阵进行的基本操作,经过初等变换后的矩阵与原矩阵是行等价列等价的。初等变换可以分为初等行变换初等列变换

初等变换的类型

  • 交换两行(或两列)的位置

    如:交换第i行与第j

    $$ \begin{array}{c} \begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\longrightarrow \begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\\ 这一变换记为r_{i}\longleftrightarrow r_{j}\\ 如果对列变换则记为c_{i}\longleftrightarrow c_{j} \end{array} $$

  • 给某行(或某列)乘一个倍数

    如:给第i行乘k倍

    $$ \begin{array}{c} \begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &...\\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\rightarrow \begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &...\\ ka_{i1} &ka_{i2} &... &ka_{in} \\ ... &... &... &...\\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\\ 这一变换记为kr_{i}\\ 如果对列变换则记为kc_{i} \end{array} $$

  • 将某一行(或一列)的倍数加到另一行(或一列)上去

    如将第j行的k倍加到第i行上去

    $$ \begin{array}{c} \begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1} &a_{i2} &... &a_{in} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\longrightarrow\begin{bmatrix} a_{11} &a_{12} &... &a_{1n} \\ ... &... &... &... \\ a_{i1}+ka_{j1} &a_{i2}+a_{j2} &... &a_{in}+a_{jn} \\ ... &... &... &... \\ a_{j1} &a_{j2} &... &a_{jn} \\ ... &... &... &... \\ a_{n1} &a_{n2} &... &a_{nn} \\ \end{bmatrix}\\ 这一变换记为r_{i}+kr_{j}\\ 如果对列变换则记为c_{i}+kc_{j} \end{array} $$

如果一个方阵可逆则一定可以通过一系列初等行变换或初等列变换化为单位矩阵

初等矩阵

初等矩阵是由单位矩阵经过一次初等变换得到的矩阵。

根据初等变换的类型,初等矩阵可以分为以下三类:

交换两行(或两列)的位置

如:交换第i行和第j

$$ \begin{array}{c} E(i,j)=\begin{bmatrix} 1 &0 &... &0&0 \\ ...& ... & ... & ...&...\\ 0&0 & ...& 1&0\\ ...& ... & ... & ...&...\\ 0&1 &... &0&0\\ ...& ... & ... & ...&...\\ 0&0 &... &0&1\\ \end{bmatrix}\\ \end{array} $$

将某一行(或一列)乘以非零常数

如:给第i行乘以k倍

$$ \begin{array}{c} E(ki)=\begin{bmatrix} 1 &0 &... &0&0 \\ 0&1 & ...& 0&0\\ ...& ... & ... & ...&...\\ 0&... & k& ...&0\\ ...& ... & ... & ...&...\\ 0&0 & ...&1&0\\ 0&0 &... &0&1\\ \end{bmatrix}\\ \end{array} $$

将某一行(或一列)的倍数加到另一行(或一列)上去

如:将第j行的k倍加到第i行上去

$$ \begin{array}{c} E(i,kj)=\begin{bmatrix} 1 &0 &... &0&0 \\ ...& ... & ... & ...&...\\ 0&1 & ...& k&0\\ ...& ... & ... & ...&...\\ 0&0 &... &1&0\\ ...& ... & ... & ...&...\\ 0&0 &... &0&1\\ \end{bmatrix}\\ \end{array} $$

初等矩阵的意义

初等矩阵的主要用途在于对其他矩阵进行初等变换。具体来说:

  1. 左乘初等矩阵:左乘一个初等矩阵相当于对该矩阵进行相应的初等行变换。
  2. 右乘初等矩阵:右乘一个初等矩阵相当于对该矩阵进行相应的初等列变换。

如:

$$ \begin{array}{c}E(i,j)A= \begin{bmatrix} 1 &0 &... &0&0 \\ ...& ... & ... & ...&...\\ 0&0 & ...& 1&0\\ ...& ... & ... & ...&...\\ 0&1 &... &0&0\\ ...& ... & ... & ...&...\\ 0&0 &... &0&1\\ \end{bmatrix}\times \begin{bmatrix} a_{11}&a_{12} & ...& a_{1(n-1)}&a_{1m}\\ ...& ... & ... & ...&...\\ a_{i1}&a_{i2} & ...& a_{i(n-1)}&a_{im}\\ ...& ... & ... & ...&...\\ a_{j1}&a_{j2} & ...& a_{j(n-1)}&a_{jm}\\ ...& ... & ... & ...&...\\ a_{n1}&a_{n2} & ...& a_{n(n-1)}&a_{nm}\\ \end{bmatrix}\\=\begin{bmatrix} a_{11}&a_{12} & ...& a_{1(n-1)}&a_{1m}\\ ...& ... & ... & ...&...\\ a_{j1}&a_{j2} & ...& a_{j(n-1)}&a_{jm}\\ ...& ... & ... & ...&...\\ a_{i1}&a_{i2} & ...& a_{i(n-1)}&a_{im}\\ ...& ... & ... & ...&...\\ a_{n1}&a_{n2} & ...& a_{n(n-1)}&a_{nm}\\ \end{bmatrix} \end{array} $$

初等矩阵的应用

计算矩阵的逆

我们知道通过一系列初等行变换可以将可逆方阵化为单位矩阵

$$ 即存在一系列初等矩阵P_{n}P_{n-1}...P_{1}A=E\\ 我们又知道A^{-1}A=E,所以P_{n}P_{n-1}...P_{1}=A^{-1} $$

向量空间

m维向量与向量空间

定义

$$ 设K是一个数域,K中m个数a_1,a_2...a_m所组成的一个有序数组\\a=\begin{bmatrix} a_1 &a_2 &... &a_m \end{bmatrix}(行向量)\\ 或者a=\begin{bmatrix} a_1 \\ a_2\\ ... \\ a_m \end{bmatrix}(列向量) \\称为m维向量a_i称为第i个分量或者坐标.\\K上全体m维向量所组成的集合记为K^m该集合就称为m维向量空间\\ 在K^m上定义两个向量的加法\\ \begin{bmatrix} a_1 \\ a_2\\ ... \\ a_m \end{bmatrix}+\begin{bmatrix} b_1 \\ b_2\\ ... \\ b_m \end{bmatrix}=\begin{bmatrix} a_1+b_1 \\ a_2+b_2\\ ... \\ a_m+b_m \end{bmatrix} 结果向量还是属于K^m \\在K^m中向量的数乘\\ k\begin{bmatrix} a_1 \\ a_2\\ ... \\ a_m \end{bmatrix}=\begin{bmatrix} ka_1 \\ ka_2\\ ... \\ ka_m \end{bmatrix}结果向量还是属于K^m $$

向量组

定义

若干个同维的列向量(行向量)组成的集合称为向量组

$$ 设\alpha _1,\alpha_2,...,\alpha_t\in \mathbb{P}^n,则 \alpha _1,\alpha_2,...,\alpha_t称为一个\mathbf{n元向量组} $$

线性表示

$$ \begin{array}{c} 设\beta,\alpha _1,\alpha_2,...,\alpha_t\in \mathbb{P}^n,如果存在不全为零的数k_1,k_2,...k_t\in\mathbb{P} 使得\\ \beta =k_1\alpha_1+k_2\alpha_2+...+k_t\alpha_t\\则称\beta 可以被向量组\alpha _1,\alpha_2,...,\alpha_t\mathbf{线性表示},上等式也可以叫做\\\beta是\alpha _1,\alpha_2,...,\alpha_t的一个\mathbf{线性组合} \end{array} $$

线性相关性

$$ \begin{array}{c} 设\alpha _1,\alpha_2,...,\alpha_t\in \mathbb{P}^n,如果存在不全为零的数k_1,k_2,...k_t\in\mathbb{P} 使得\\ k_1\alpha_1+k_2\alpha_2+...+k_t\alpha_t=0\\则称\alpha _1,\alpha_2,...,\alpha_t\mathbf{线性相关}\\上命题的逆命定就是\mathbf{线性无关}\\如果向量组\beta中所有的元素都能被向量组\alpha线性表示则称向量组\beta能够被向量组\alpha线性表示\\如果同时向量组\alpha中所有的向量都能够被向量组\beta中的向量线性表示则称向量组\alpha与向量组\beta\mathbf{等价} \end{array} $$

极大无关组

$$ 设向量组\alpha _1,\alpha_2,...,\alpha_t中存在一个数量最大的子向量组\alpha _i,\alpha_{i+1},...,\alpha_r是线性无关的\\且该子向量组能够表示向量组\alpha _1,\alpha_2,...,\alpha_t中任意一个向量则称该子向量组(部分组)是该向量组的\mathbf{极大线性无关组}\\简称 \mathbf{极大无关组},极大无关组的向量的数量称为该向量组的\mathbf{秩} $$

向量与矩阵

向量组可以用矩阵来表示如:

$$ \begin{array}{c} \alpha_1=\begin{bmatrix} a_{11} \\ a_{21} \\ ... \\ a_{n1} \end{bmatrix} \alpha_2=\begin{bmatrix} a_{12} \\ a_{22} \\ ... \\ a_{n2} \end{bmatrix}... \alpha_m=\begin{bmatrix} a_{1m} \\ a_{2m} \\ ... \\ a_{nm} \end{bmatrix}\\ \mathbb{P^n}= \begin{bmatrix} \alpha_1 &\alpha_2 &... &\alpha_m \end{bmatrix}=M_{nm}=\begin{bmatrix} a_{11} &a_{12} &... &a_{1m} \\ a_{21} &a_{22} &... &a_{2m} \\ ...&... &... &... \\ a_{n1} &a_{n2} &... &a_{nm} \\ \end{bmatrix}\\ 或者\mathbb{P^n}= \begin{bmatrix} \alpha_1^T \\ \alpha_2^T \\ ... \\\alpha_m^T \end{bmatrix}=M_{nm}^T \end{array} $$

所以向量组的秩等于矩阵的行秩等与矩阵的列秩等于矩阵的秩,记为

$$ Rank(M)=r,r为M的秩 $$