做法
具体来说,以 b a s e base base 为四位二进制数举例,此时 b a s e = ( a b c d ‾ ) 2 base=(\overline{abcd})_{2} base=(abcd)2。也就是下面这个矩阵:
1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | |
---|---|---|---|---|
a a a | 1 | 0 | 0 | 0 |
b b b | 0 | 1 | 0 | 0 |
c c c | 0 | 0 | 1 | 0 |
d d d | 0 | 0 | 0 | 1 |
由于伪随机代码已给出,所以我们可以模拟左移、右移以及异或。
比如上面这个矩阵左移一位就变成了:
1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | |
---|---|---|---|---|
a a a | 0 | 0 | 0 | 0 |
b b b | 1 | 0 | 0 | 0 |
c c c | 0 | 1 | 0 | 0 |
d d d | 0 | 0 | 1 | 0 |
右移和异或操作同理。
然后我们可以根据对方的手势反推出当前
b
a
s
e
base
base 的最后一位的表达式。
比如对于以下矩阵:
1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | |
---|---|---|---|---|
a a a | 0 | 1 | 1 | 1 |
b b b | 1 | 0 | 0 | 1 |
c c c | 0 | 1 | 1 | 0 |
d d d | 1 | 0 | 1 | 1 |
并且推出此时 x x x 的最后一位为 1 1 1,那么有 a xor b xor d = 1 a\text{ xor }b\text{ xor }d=1 a xor b xor d=1。
同理,每一轮进行一遍这样的操作,我们可以得到一堆这样的式子。最后高斯消元求解出 a b c d ‾ \overline{abcd} abcd,接下来就可以随便做做了。
高斯消元
用高斯消元解下列方程组。
{ 2 x 1 + 5 x 3 + 6 x 4 = 9 x 3 + x 4 = − 4 2 x 3 + 2 x 4 = − 8 \begin{cases}2x_1+5x_3+6x_4=9\\x_3+x_4=-4\\2x_3+2x_4=-8 \end{cases} ⎩⎪⎨⎪⎧2x1+5x3+6x4=9x3+x4=−42x3+2x4=−8
第一步:增广矩阵行(初等)变换为行最简形
所谓增广矩阵,即为方程组系数矩阵 A A A 与常数列 b b b 的并生成的新矩阵,即 ( A ∣ b ) (A|b) (A∣b),增广矩阵行初等变换化为行最简形,即是利用了高斯消元法的思想理念,省略了变量而用变量的系数位置表示变量,增广矩阵中用竖线隔开了系数矩阵和常数列,代表了等于符号。
( 2 0 5 6 0 0 1 1 0 0 2 2 9 − 4 − 8 ) r 3 − 2 r 2 → ( 2 0 5 6 0 0 1 1 0 0 0 0 9 − 4 0 ) \left(\begin{matrix}2&0&5&6\\0&0&1&1\\0&0&2&2\end{matrix}\ \ \begin{array}{|c}9\\-4\\-8\end{array}\right)\\\ \\ \underrightarrow{r_3-2r_2}\left(\begin{matrix}2&0&5&6\\0&0&1&1\\0&0&0&0\end{matrix}\ \ \begin{array}{|c}9\\-4\\0\end{array}\right) ⎝⎛200000512612 9−4−8⎠⎞ r3−2r2⎝⎛200000510610 9−40⎠⎞
化为行阶梯形
r 1 2 → ( 1 0 2.5 3 0 0 1 1 0 0 0 0 4.5 − 4 0 ) r 1 − 2.5 × r 2 → ( 1 0 0 0.5 0 0 1 1 0 0 0 0 14.5 − 4 0 ) \underrightarrow{\frac{r_1}{2}}\left(\begin{matrix}1&0&2.5&3\\0&0&1&1\\0&0&0&0\end{matrix}\ \ \begin{array}{|c}4.5\\-4\\0\end{array}\right)\\\ \\ \underrightarrow{r_1-2.5\times r_2}\left(\begin{matrix}1&0&0&0.5\\0&0&1&1\\0&0&0&0\end{matrix}\ \ \begin{array}{|c}14.5\\-4\\0\end{array}\right) 2r1⎝⎛1000002.510310 4.5−40⎠⎞ r1−2.5×r2⎝⎛1000000100.510 14.5−40⎠⎞
化为最简形
第二步:还原线性方程组
{ x 1 + 0.5 x 4 = 14.5 x 3 + x 4 = − 4 \begin{cases}x_1+0.5x_4=14.5\\x_3+x_4=-4\end{cases} {x1+0.5x4=14.5x3+x4=−4
所谓的还原线性方程组,即是在行最简形的基础上,将之重新书写为线性方程组的形式,即将行最简形中各位置的系数重新赋予变量,中间的竖线还原为等号。
第三步:求解第一个变量
{ x 1 = − 0.5 x 4 + 14.5 x 3 = − x 4 − 4 \begin{cases}x_1=-0.5x_4+14.5\\x_3=-x_4-4\end{cases} {x1=−0.5x4+14.5x3=−x4−4
即是对于所还原的线性方程组而言,将方程组中每个方程的第一个变量,用其他量表达出来。如方程组两方程中的第一个变量 x 1 x_1 x1 和 x 3 x_3 x3。
第四步:补充自由未知量
{ x 1 = − 0.5 x 4 + 14.5 x 2 = x 2 x 3 = − x 4 − 4 x 4 = x 4 \begin{cases}x_1=-0.5x_4+14.5\\x_2=x_2\\x_3=-x_4-4\\x_4=x_4\end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧x1=−0.5x4+14.5x2=x2x3=−x4−4x4=x4
第 3 步中,求解出变量 x 1 x_1 x1 和 x 3 x_3 x3,从而说明了方程剩余的变量 x 2 x_2 x2 和 x 4 x_4 x4 不受方程组的约束,是自由未知量,可以取任意值,所以需要在第 3 步骤解得基础上进行解得补充,补充的方法为 x 2 = x 2 , x 4 = x 4 x_2=x_2,x_4=x_4 x2=x2,x4=x4,这种解得补充方式符合自由未知量定义,并易于理解,因为是自由未知量而不受约束,所以只能自己等于自己。
第五步:列表示方程组的通解
( x 1 x 2 x 3 x 4 ) = ( 0 1 0 0 ) x 2 + ( − 0.5 0 − 1 1 ) x 4 + ( 14.5 0 − 4 0 ) = ( 0 1 0 0 ) C 1 + ( − 0.5 0 − 1 1 ) C 2 + ( 14.5 0 − 4 0 ) \begin{matrix}\left(\begin{matrix}x_1\\x_2\\x_3\\x_4\end{matrix}\right)=\left(\begin{matrix}0\\1\\0\\0\end{matrix}\right)x_2+\left(\begin{matrix}-0.5\\0\\-1\\1\end{matrix}\right)x_4+\left(\begin{matrix}14.5\\0\\-4\\0\end{matrix}\right)\\\\\ \ \ \ \ \ \ \ \ \ \ \ \ =\left(\begin{matrix}0\\1\\0\\0\end{matrix}\right)C_1+\left(\begin{matrix}-0.5\\0\\-1\\1\end{matrix}\right)C_2+\left(\begin{matrix}14.5\\0\\-4\\0\end{matrix}\right)\end{matrix} ⎝⎜⎜⎛x1x2x3x4⎠⎟⎟⎞=⎝⎜⎜⎛0100⎠⎟⎟⎞x2+⎝⎜⎜⎛−0.50−11⎠⎟⎟⎞x4+⎝⎜⎜⎛14.50−40⎠⎟⎟⎞ =⎝⎜⎜⎛0100⎠⎟⎟⎞C1+⎝⎜⎜⎛−0.50−11⎠⎟⎟⎞C2+⎝⎜⎜⎛14.50−40⎠⎟⎟⎞
其中 C 1 C_1 C1 和 C 2 C_2 C2 为任意常数。
即在第 4 步的基础上,将解表达为列向量组合的表示形式,同时由于 x 2 x_2 x2 和 x 4 x_4 x4 是自由未知量,可以取任意值,所以在解得右边,令二者分别为任意常数 C 1 C_1 C1 和 C 2 C_2 C2,即实现了对方程组的求解。
行列式
N × N N\times N N×N 方阵行列式(Determinant)可以理解为所有列向量所夹的几何体的有向体积,
例如:
∣ 1 0 0 1 ∣ = 1 ∣ 1 2 2 1 ∣ = − 3 \begin{vmatrix}1&0\\0&1\end{vmatrix}=1\\\ \\ \begin{vmatrix}1&2\\2&1\end{vmatrix}=-3 ∣∣∣∣1001∣∣∣∣=1 ∣∣∣∣1221∣∣∣∣=−3
行列式有公式
D = ∣ A ∣ = ∑ ( − 1 ) v a 1 , l 1 , a 2 , l 2 … a n , l n , D=|A|=\sum(-1)^va_{1,l_1},a_{2,l_2} \ldots a_{n,l_n}, D=∣A∣=∑(−1)va1,l1,a2,l2…an,ln,
其中 v v v 为 l 1 , l 2 , ⋯ , l n l_1,l_2,\cdots,l_n l1,l2,⋯,ln 中逆序对的个数。
通过体积概念理解行列式不变性是一个非常简单的办法:
- 矩阵转置,行列式不变;
- 矩阵行交换,行列式取反;
- 矩阵行叠加,行列式不变;
- 矩阵行伸长,行列式等比例变大。
由此,发现高斯消元不改变矩阵行列式,且最终行列式等于倒三角矩阵的对角线乘积。