线性代数基础(一)行列式,矩阵,向量与方程组之间的联系(上)

最近想看一看计算机图形学的知识,但是看到课程要求里面的前置知识有线性代数,就重新看了一些,目前是看了行列式,矩阵,向量和方程组的性质。
这篇博客主要目的不是挨个总结矩阵的性质,而是梳理我在复习过程中一直有的一个疑问,就是,这几个东西为什么会放在一起讲,他们之间有什么关系,并且稍微结合一下渲染原理中的一些理念,矩阵是如何应用到其中的。

行列式,矩阵,向量和方程组之间的关系的一些理解

  • 行列式是一个值,他是一个数,是标量,而矩阵则是一个表格。
  • 行列式的值可以看作是矩阵的一个特性,通过行列式的值的计算,可以判断一些矩阵的性质。
  • 矩阵是一个m*n的表格,但是如果把每一列看成列向量,那么整个矩阵可以看作是一个行向量,或者是向量组。
  • 矩阵和向量都可以是方程组的一种表达方式,通过将方程组转化为矩阵或者向量的表示方式,可以有很多性质帮助我们简化计算。

矩阵与渲染管线的关系

在游戏运行过程中,我们需要将模型中的点变为屏幕上的像素点,这期间涉及到将点的坐标从模型坐标系转化到世界坐标系,再转化到摄像机的坐标系中等等一系列转化,坐标空间的转化,其实就是坐标的转化,(x1, y1, z1)变成(x2, y2, z2),这个转化就是方程组三个三元一次方程组成的方程组。
也就是说,我们可以把坐标转换的方程组变成矩阵的相乘。
这样做的好处一个是矩阵表示起来更加方便,其次是我们有很多手段可以简化矩阵的相乘,同时有时候我们需要在模型空间之间相互转化,如果用方程组,我们就要重新计算出一个方程组,但是如果用矩阵,那么直接用逆矩阵就可以了,而如果你是正交矩阵,那么甚至可以直接用转置矩阵。

行列式,矩阵,向量,方程组一些特性以及之间的关系

行列式

行列式是一个数,它是不同行不同列元素乘积的代数和。

有一点需要注意的是,行列式的行数和列数是相同的,都为n,那么这个行列式就叫做n阶行列式。

对于三阶及以下的行列式,我们可以直接用对角线法求出行列式的值,对于三阶以上的行列式,我们就需要套用公式了

a11a12...a1na21a22...a2n............an1an2...ann=r=1n(1)r(j1j2...jn)a1j1a2j2...anjn\begin{vmatrix} a_{11} & a_{12} & ... & a_{1n} \\ a_{21} & a_{22} & ... & a_{2n} \\ ... & ... & ... & ... \\ a_{n1} & a_{n2} & ... & a_{nn} \\ \end{vmatrix} = \sum_{r=1}^n(-1)^{r(j_1j_2...j_n)}a_{1j_1}a_{2j_2}...a_{nj_n}

其中r(j1j2..jn)表示j1j2..jn的逆序数(一个大的数在一个小的数前面,就称这两个数构成一个逆序,一个排列中的逆序总数就叫做这个排列的逆序数),逆序数为偶数的叫做偶排列,逆序数为奇数的叫做奇排列。

行列式的性质

  • 经过转置行列式的值不变
  • 两行(或两列)互换位置,行列式的值为0。
    • 推论1:两行或者两列完全相同,行列式值为0

行列式值是否为0是一个很重要的性质,与方程组是否有解,向量组是否线性无关等问题紧密联系

  • 某行或者某列有公因子k,可以把k提出行列式记号外,即用数k乘以行列式等于用k乘以它的某一行。
    • 推论1:某行或者某列值为0,那么行列式值为0
    • 推论2:两行(或两列)的元素对应成比例,行列式的值为0
  • 某行或者某列可以是两个元素的和,那么可以拆成两个行列式相加

a1+b1a2+b2a3+b3c1c2c3d1d2d3=a1a2a3c1c2c3d1d2d3+b1b2b3c1c2c3d1d2d3\begin{vmatrix} a_1 + b_1 & a_2 + b_2 & a_3 + b_3 \\ c_1 & c_2 & c_3 \\ d_1 & d_2 & d_3 \end{vmatrix} = \begin{vmatrix} a_1 & a_2 & a_3 \\ c_1 & c_2 & c_3 \\ d_1 & d_2 & d_3 \end{vmatrix} + \begin{vmatrix} b_1 & b_2 & b_3 \\ c_1 & c_2 & c_3 \\ d_1 & d_2 & d_3 \end{vmatrix}

  • 某行(或列)的k倍加到另一行(或列),行列式的值不变

a1a2a3b1b2b3c1c2c3=a1a2a3b1+ka1b2+ka2b3+ka3c1c2c3\begin{vmatrix} a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ c_1 & c_2 & c_3 \end{vmatrix} = \begin{vmatrix} a_1 & a_2 & a_3 \\ b_1 + ka_1 & b_2 + ka_2 & b_3 + ka_3 \\ c_1 & c_2 & c_3 \end{vmatrix}

行列式的按行(或列)展开公式 (拉普拉斯展开)

在n阶行列式中划去a_ij所在的第i行和第j列所有的元素,剩下的n-1阶行列式,叫做a_ij的余子式,记为M_ij

(-1)^(i+j)M_ija_ij的代数余子式,记为A_ij,即:

Aij=(1)i+jMijA_{ij} = (-1)^{i + j}M_{ij}

定理1:n阶行列式等于它的任何一行元素与其对应的代数余子式的乘积之和

A=ai1Ai1+ai2Ai2+...+aikAik=k=1naikAik,i=1,2,3,...,n\begin{vmatrix} A \end{vmatrix} = a_{i1}A_{i1} + a_{i2}A_{i2} + ... + a_{ik}A_{ik} = \sum_{k=1}^na_{ik}A_{ik}, i = 1, 2, 3, ..., n

A=a1iA1i+a2iA2i+...+akiAki=k=1nakiAki,i=1,2,3,...,n\begin{vmatrix} A \end{vmatrix} = a_{1i}A_{1i} + a_{2i}A_{2i} + ... + a_{ki}A_{ki} = \sum_{k=1}^na_{ki}A_{ki}, i = 1, 2, 3, ..., n

第一个成为行列式的按行展开式,第二个称为按列展开式。

定理2:行列式的任意一行与另一行的元素的代数余子式的和为0

k=1naikAjk=0,ij\sum_{k=1}^na_{ik}A_{jk} = 0, i \ne j

还有几种特殊情况:

  • 上(下)三角行列式的值为对角线的乘积

  • 副对角线的行列式的值则是

(1)n(n1)2a1na2,n1...aan1(-1)^{\frac {n(n-1)}2}a_{1n}a_{2,n-1}...a_{an1}

  • 如果A和B分别是m和n阶矩阵,则

    A0B=A0B=AB,AB0=0AB=(1)mnAB\begin{vmatrix} A & * \\ 0 & B \end{vmatrix} = \begin{vmatrix} A & 0 \\ * & B \end{vmatrix} = \begin{vmatrix} A \end{vmatrix} * \begin{vmatrix} B \end{vmatrix} , \begin{vmatrix} * & A \\ B & 0 \end{vmatrix} = \begin{vmatrix} 0 & A \\ B & * \end{vmatrix} = (-1)^{mn} \begin{vmatrix} A \end{vmatrix} * \begin{vmatrix} B \end{vmatrix}

  • 范德蒙行列式

11...1x1x2...xnx12x22...xn2............x1n1x2n1...xnn1=1jin(xixj)\begin{vmatrix} 1 & 1 & ... & 1 \\ x_1 & x_2 & ... & x_n \\ x_1^2 & x_2^2 & ... & x_n^2 \\ ... & ... & ... & ... \\ x_1^{n-1} & x_2^{n-1} & ... & x_n^{n-1} \end{vmatrix} = \prod_{1 \le j \le i \le n}(x_i - x_j)

克拉默法则

若n个方程n个未知量组成的非齐次线性方程组的系数行列式值不为0,那么方程组有唯一解,且

xi=AiA,i=1,2,3,...,nx_i = \frac { \begin{vmatrix} A_i \end{vmatrix} } { \begin{vmatrix} A \end{vmatrix} } , i = 1, 2, 3, ..., n

其中Ai是|A|中第i元素替换成方程组右端常数项所构成的行列式

推论:n个方程n个未知量组成的齐次线性方程组,系数行列式|A| != 0的充要条件是方程组有唯一零解(因为方程组右端的常数全是0,所以|Ai|就是0,那么所有xi就是0)。

反之,如果有非零解,那么|A| = 0.

矩阵

向量

方程组