接上文
目录
三、代数模型
1、代数模型概述
当工程技术和社会领域中的许多问题暂时不考虑时间因素的变化,或者可以看作静态问题处理时,可以把实际问题抽象到线性空间中,利用线性代数中的向量、矩阵、线性方程组等工具建立模型,从而分析事物的内在规律,并预测其发展趋势。
代数模型的基本特点是:用相应的向量、矩阵、线性方程等代数对象刻画实际问题中的数量关系,再利用线性代数方法进行求解和分析。
本节的主要任务是体会线性代数中的抽象概念怎样运用到解决实际问题的过程中。
2、植物基因的分布
题目:设一农业研究所植物园中某种植物的基因型为 AA、Aa 和 aa。研究所计划采用 AA 型植物与每一种基因型植物相结合的方案培育植物后代。问经过若干年后,这种植物任意一代的三种基因型分布如何?
解析一:问题的核心是建立相邻两代之间的基因型转移关系。
基因对决定了植物的特征。在常染色体遗传中,后代会从每个亲本的基因对中各继承一个基因,形成自己的基因对,也就是基因型。本题的育种方式是固定的:用 AA 型植物与其它基因型植物结合,研究后代中 AA、Aa、aa 三种基因型比例的变化。
在本问题中,植物的基因型共有三种:AA、Aa、aa。记:
x 1 ( n ) x_1(n) x1(n) 表示第 n n n 代中基因型 AA 的植物占植物总数的比例;
x 2 ( n ) x_2(n) x2(n) 表示第 n n n 代中基因型 Aa 的植物占植物总数的比例;
x 3 ( n ) x_3(n) x3(n) 表示第 n n n 代中基因型 aa 的植物占植物总数的比例。
显然有:
x 1 ( n ) + x 2 ( n ) + x 3 ( n ) = 1 x_1(n)+x_2(n)+x_3(n)=1 x1(n)+x2(n)+x3(n)=1
根据遗传规律,AA 型植物与不同基因型植物结合时,后代基因型分布如下:
| 父体-母体基因型 | 后代为 AA 的概率 | 后代为 Aa 的概率 | 后代为 aa 的概率 |
|---|---|---|---|
| AA-AA | 1 1 1 | 0 0 0 | 0 0 0 |
| AA-Aa | 1 2 \dfrac{1}{2} 21 | 1 2 \dfrac{1}{2} 21 | 0 0 0 |
| AA-aa | 0 0 0 | 1 1 1 | 0 0 0 |
因此,第 n n n 代与第 n − 1 n-1 n−1 代之间满足:
{ x 1 ( n ) = x 1 ( n − 1 ) + 1 2 x 2 ( n − 1 ) , x 2 ( n ) = 1 2 x 2 ( n − 1 ) + x 3 ( n − 1 ) , x 3 ( n ) = 0. \begin{cases} x_1(n)=x_1(n-1)+\dfrac{1}{2}x_2(n-1),\\ x_2(n)=\dfrac{1}{2}x_2(n-1)+x_3(n-1),\\ x_3(n)=0. \end{cases} ⎩ ⎨ ⎧x1(n)=x1(n−1)+21x2(n−1),x2(n)=21x2(n−1)+x3(n−1),x3(n)=0.
解析二:用矩阵形式表示基因型分布的递推关系。
引入状态向量:
x ( n ) = [ x 1 ( n ) x 2 ( n ) x 3 ( n ) ] \mathbf{x}(n)= \begin{bmatrix} x_1(n)\\ x_2(n)\\ x_3(n) \end{bmatrix} x(n)= x1(n)x2(n)x3(n)
由上面的递推关系可写成:
x ( n ) = L x ( n − 1 ) \mathbf{x}(n)=L\mathbf{x}(n-1) x(n)=Lx(n−1)
其中转移矩阵为:
L = [ 1 1 2 0 0 1 2 1 0 0 0 ] L= \begin{bmatrix} 1 & \dfrac{1}{2} & 0\\ 0 & \dfrac{1}{2} & 1\\ 0 & 0 & 0 \end{bmatrix} L= 10021210010
于是:
x ( n ) = L n x ( 0 ) , n = 1 , 2 , ⋯ \mathbf{x}(n)=L^n\mathbf{x}(0),\quad n=1,2,\cdots x(n)=Lnx(0),n=1,2,⋯
这里 x ( 0 ) \mathbf{x}(0) x(0) 表示初始代的基因型分布。
解析三:计算 L n L^n Ln,从而得到任意一代的分布。
为了得到第 n n n 代的分布,需要计算 L n L^n Ln。利用线性代数中矩阵对角化 的方法(也可以用递推 的方法),可以将 L L L 对角化,从而计算矩阵的幂。计算结果可写为:
L n = [ 1 1 − ( 1 2 ) n 1 − ( 1 2 ) n − 1 0 ( 1 2 ) n ( 1 2 ) n − 1 0 0 0 ] L^n= \begin{bmatrix} 1 & 1-\left(\dfrac{1}{2}\right)^n & 1-\left(\dfrac{1}{2}\right)^{n-1}\\ 0 & \left(\dfrac{1}{2}\right)^n & \left(\dfrac{1}{2}\right)^{n-1}\\ 0 & 0 & 0 \end{bmatrix} Ln= 1001−(21)n(21)n01−(21)n−1(21)n−10
补充: L n L^n Ln 的计算过程。
方法一:用递推法计算 L n L^n Ln。
由于 L L L 是上三角矩阵, L n L^n Ln 仍为上三角矩阵。设:
L n = [ 1 a n b n 0 c n d n 0 0 0 ] L^n= \begin{bmatrix} 1 & a_n & b_n\\ 0 & c_n & d_n\\ 0 & 0 & 0 \end{bmatrix} Ln= 100ancn0bndn0
由 L n + 1 = L n L L^{n+1}=L^nL Ln+1=LnL,有:
1 a n b n 0 c n d n 0 0 0 \] \[ 1 1 2 0 0 1 2 1 0 0 0 \] = \[ 1 1 2 + 1 2 a n a n 0 1 2 c n c n 0 0 0 \] \\begin{bmatrix} 1 \& a_n \& b_n\\\\ 0 \& c_n \& d_n\\\\ 0 \& 0 \& 0 \\end{bmatrix} \\begin{bmatrix} 1 \& \\dfrac12 \& 0\\\\ 0 \& \\dfrac12 \& 1\\\\ 0 \& 0 \& 0 \\end{bmatrix}= \\begin{bmatrix} 1 \& \\dfrac12+\\dfrac12a_n \& a_n\\\\ 0 \& \\dfrac12c_n \& c_n\\\\ 0 \& 0 \& 0 \\end{bmatrix} 100ancn0bndn0 10021210010 = 10021+21an21cn0ancn0 因此得到递推关系: a n + 1 = 1 2 + 1 2 a n , b n + 1 = a n , c n + 1 = 1 2 c n , d n + 1 = c n a_{n+1}=\\dfrac12+\\dfrac12a_n,\\quad b_{n+1}=a_n,\\quad c_{n+1}=\\dfrac12c_n,\\quad d_{n+1}=c_n an+1=21+21an,bn+1=an,cn+1=21cn,dn+1=cn 当 n = 1 n=1 n=1 时,由 L 1 = L L\^1=L L1=L 可知: a 1 = 1 2 , b 1 = 0 , c 1 = 1 2 , d 1 = 1 a_1=\\dfrac12,\\quad b_1=0,\\quad c_1=\\dfrac12,\\quad d_1=1 a1=21,b1=0,c1=21,d1=1 由 c n + 1 = 1 2 c n c_{n+1}=\\dfrac12c_n cn+1=21cn 得: c n = ( 1 2 ) n c_n=\\left(\\dfrac12\\right)\^n cn=(21)n 由 d n + 1 = c n d_{n+1}=c_n dn+1=cn 得: d n = c n − 1 = ( 1 2 ) n − 1 d_n=c_{n-1}=\\left(\\dfrac12\\right)\^{n-1} dn=cn−1=(21)n−1 由 a n + 1 = 1 2 + 1 2 a n a_{n+1}=\\dfrac12+\\dfrac12a_n an+1=21+21an,令 u n = 1 − a n u_n=1-a_n un=1−an,则: u n + 1 = 1 − a n + 1 = 1 − ( 1 2 + 1 2 a n ) = 1 2 ( 1 − a n ) = 1 2 u n u_{n+1}=1-a_{n+1} =1-\\left(\\dfrac12+\\dfrac12a_n\\right) =\\dfrac12(1-a_n) =\\dfrac12u_n un+1=1−an+1=1−(21+21an)=21(1−an)=21un 又因为 u 1 = 1 − a 1 = 1 2 u_1=1-a_1=\\dfrac12 u1=1−a1=21,所以: u n = ( 1 2 ) n u_n=\\left(\\dfrac12\\right)\^n un=(21)n 因此: a n = 1 − ( 1 2 ) n a_n=1-\\left(\\dfrac12\\right)\^n an=1−(21)n 再由 b n + 1 = a n b_{n+1}=a_n bn+1=an 得: b n = a n − 1 = 1 − ( 1 2 ) n − 1 b_n=a_{n-1}=1-\\left(\\dfrac12\\right)\^{n-1} bn=an−1=1−(21)n−1 所以: L n = \[ 1 1 − ( 1 2 ) n 1 − ( 1 2 ) n − 1 0 ( 1 2 ) n ( 1 2 ) n − 1 0 0 0 \] L\^n= \\begin{bmatrix} 1 \& 1-\\left(\\dfrac12\\right)\^n \& 1-\\left(\\dfrac12\\right)\^{n-1}\\\\ 0 \& \\left(\\dfrac12\\right)\^n \& \\left(\\dfrac12\\right)\^{n-1}\\\\ 0 \& 0 \& 0 \\end{bmatrix} Ln= 1001−(21)n(21)n01−(21)n−1(21)n−10 > **方法二:用矩阵对角化计算 L n L\^n Ln。** 由于 L L L 是上三角矩阵,其特征值就是主对角线元素: λ 1 = 1 , λ 2 = 1 2 , λ 3 = 0 \\lambda_1=1,\\quad \\lambda_2=\\dfrac12,\\quad \\lambda_3=0 λ1=1,λ2=21,λ3=0 三个特征值互不相同,所以 L L L 可以对角化。分别求对应的特征向量,可取: λ 1 = 1 , v 1 = \[ 1 0 0 \] \\lambda_1=1,\\quad \\mathbf{v}_1= \\begin{bmatrix} 1\\\\ 0\\\\ 0 \\end{bmatrix} λ1=1,v1= 100 λ 2 = 1 2 , v 2 = \[ − 1 1 0 \] \\lambda_2=\\dfrac12,\\quad \\mathbf{v}_2= \\begin{bmatrix} -1\\\\ 1\\\\ 0 \\end{bmatrix} λ2=21,v2= −110 λ 3 = 0 , v 3 = \[ 1 − 2 1 \] \\lambda_3=0,\\quad \\mathbf{v}_3= \\begin{bmatrix} 1\\\\ -2\\\\ 1 \\end{bmatrix} λ3=0,v3= 1−21 把特征向量按列组成矩阵 P P P,并令 D D D 为对应的对角矩阵: P = \[ 1 − 1 1 0 1 − 2 0 0 1 \] , D = \[ 1 0 0 0 1 2 0 0 0 0 \] P= \\begin{bmatrix} 1 \& -1 \& 1\\\\ 0 \& 1 \& -2\\\\ 0 \& 0 \& 1 \\end{bmatrix}, \\quad D= \\begin{bmatrix} 1 \& 0 \& 0\\\\ 0 \& \\dfrac12 \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} P= 100−1101−21 ,D= 1000210000 则: L = P D P − 1 L=PDP\^{-1} L=PDP−1 其中: P − 1 = \[ 1 1 1 0 1 2 0 0 1 \] P\^{-1}= \\begin{bmatrix} 1 \& 1 \& 1\\\\ 0 \& 1 \& 2\\\\ 0 \& 0 \& 1 \\end{bmatrix} P−1= 100110121 于是: L n = P D n P − 1 L\^n=PD\^nP\^{-1} Ln=PDnP−1 当 n ≥ 1 n\\ge1 n≥1 时: D n = \[ 1 0 0 0 ( 1 2 ) n 0 0 0 0 \] D\^n= \\begin{bmatrix} 1 \& 0 \& 0\\\\ 0 \& \\left(\\dfrac12\\right)\^n \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} Dn= 1000(21)n0000 记: r = ( 1 2 ) n r=\\left(\\dfrac12\\right)\^n r=(21)n 则: D n = \[ 1 0 0 0 r 0 0 0 0 \] D\^n= \\begin{bmatrix} 1 \& 0 \& 0\\\\ 0 \& r \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} Dn= 1000r0000 因此: L n = \[ 1 − 1 1 0 1 − 2 0 0 1 \] \[ 1 0 0 0 r 0 0 0 0 \] \[ 1 1 1 0 1 2 0 0 1 \] L\^n= \\begin{bmatrix} 1 \& -1 \& 1\\\\ 0 \& 1 \& -2\\\\ 0 \& 0 \& 1 \\end{bmatrix} \\begin{bmatrix} 1 \& 0 \& 0\\\\ 0 \& r \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} \\begin{bmatrix} 1 \& 1 \& 1\\\\ 0 \& 1 \& 2\\\\ 0 \& 0 \& 1 \\end{bmatrix} Ln= 100−1101−21 1000r0000 100110121 先算前两个矩阵: P D n = \[ 1 − r 0 0 r 0 0 0 0 \] PD\^n= \\begin{bmatrix} 1 \& -r \& 0\\\\ 0 \& r \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} PDn= 100−rr0000 再乘以 P − 1 P\^{-1} P−1: L n = \[ 1 − r 0 0 r 0 0 0 0 \] \[ 1 1 1 0 1 2 0 0 1 \] = \[ 1 1 − r 1 − 2 r 0 r 2 r 0 0 0 \] L\^n= \\begin{bmatrix} 1 \& -r \& 0\\\\ 0 \& r \& 0\\\\ 0 \& 0 \& 0 \\end{bmatrix} \\begin{bmatrix} 1 \& 1 \& 1\\\\ 0 \& 1 \& 2\\\\ 0 \& 0 \& 1 \\end{bmatrix}= \\begin{bmatrix} 1 \& 1-r \& 1-2r\\\\ 0 \& r \& 2r\\\\ 0 \& 0 \& 0 \\end{bmatrix} Ln= 100−rr0000 100110121 = 1001−rr01−2r2r0 将 r = ( 1 2 ) n r=\\left(\\dfrac12\\right)\^n r=(21)n 代回,并注意: 2 ( 1 2 ) n = ( 1 2 ) n − 1 2\\left(\\dfrac12\\right)\^n=\\left(\\dfrac12\\right)\^{n-1} 2(21)n=(21)n−1 所以: L n = \[ 1 1 − ( 1 2 ) n 1 − ( 1 2 ) n − 1 0 ( 1 2 ) n ( 1 2 ) n − 1 0 0 0 \] L\^n= \\begin{bmatrix} 1 \& 1-\\left(\\dfrac12\\right)\^n \& 1-\\left(\\dfrac12\\right)\^{n-1}\\\\ 0 \& \\left(\\dfrac12\\right)\^n \& \\left(\\dfrac12\\right)\^{n-1}\\\\ 0 \& 0 \& 0 \\end{bmatrix} Ln= 1001−(21)n(21)n01−(21)n−1(21)n−10 > L n L\^n Ln 计算过程补充完毕 代入: x ( n ) = L n x ( 0 ) \\mathbf{x}(n)=L\^n\\mathbf{x}(0) x(n)=Lnx(0) 得到: x 1 ( n ) = x 1 ( 0 ) + \[ 1 − ( 1 2 ) n \] x 2 ( 0 ) + \[ 1 − ( 1 2 ) n − 1 \] x 3 ( 0 ) x_1(n)= x_1(0) + \\left\[1-\\left(\\dfrac{1}{2}\\right)\^n\\right\]x_2(0) + \\left\[1-\\left(\\dfrac{1}{2}\\right)\^{n-1}\\right\]x_3(0) x1(n)=x1(0)+\[1−(21)n\]x2(0)+\[1−(21)n−1\]x3(0) x 2 ( n ) = ( 1 2 ) n x 2 ( 0 ) + ( 1 2 ) n − 1 x 3 ( 0 ) x_2(n)= \\left(\\dfrac{1}{2}\\right)\^n x_2(0) + \\left(\\dfrac{1}{2}\\right)\^{n-1}x_3(0) x2(n)=(21)nx2(0)+(21)n−1x3(0) x 3 ( n ) = 0 x_3(n)=0 x3(n)=0 当 n → + ∞ n\\to+\\infty n→+∞ 时,有: ( 1 2 ) n → 0 , ( 1 2 ) n − 1 → 0 \\left(\\dfrac{1}{2}\\right)\^n\\to0,\\quad \\left(\\dfrac{1}{2}\\right)\^{n-1}\\to0 (21)n→0,(21)n−1→0 因此: lim n → + ∞ x 1 ( n ) = 1 , lim n → + ∞ x 2 ( n ) = 0 , lim n → + ∞ x 3 ( n ) = 0 \\lim_{n\\to+\\infty}x_1(n)=1,\\quad \\lim_{n\\to+\\infty}x_2(n)=0,\\quad \\lim_{n\\to+\\infty}x_3(n)=0 n→+∞limx1(n)=1,n→+∞limx2(n)=0,n→+∞limx3(n)=0 **结论:在该育种方式下,AA 型基因所占比例会不断增加;在极限状态下,所有植物的基因型都会趋于 AA 型。** **3、信息的加密与解密** 信息安全涉及范围很广,大到国家军事、政治等机密安全,小到商业企业机密和个人信息保护等。网络环境下的信息安全体系通常包括计算机安全操作系统、安全协议、安全机制以及安全系统,其中数据加密是重要组成部分。 本节讨论一种利用线性代数中矩阵运算进行加密和解密的代数密码:希尔密码。 **题目:如何利用矩阵运算实现信息的加密与解密?** **解析一:希尔密码通过矩阵运算打破明文字符与密文字符的一一对应关系。** 移位密码的一个明显弱点是:明文字符和密文字符具有相同的使用频率,破译者可以利用字符频率统计寻找规律。为了克服这一缺陷,需要改变字符之间简单的一一对应关系。 1929 年,希尔利用线性代数中的矩阵运算设计了一种代数密码,称为希尔密码。其基本思想是:先把字符转换成数字,再把若干个数字组成向量,用矩阵乘法对向量进行加密。 例如,对英文字母可以作如下对应: | 字母 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |:--:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:-:| | 数字 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 0 | 将明文按 n n n 个字符一组分组,并用对应数字表示,就得到一个 n n n 维列向量。若取定一个 n n n 阶可逆矩阵 A A A 作为加密矩阵,则每组明文向量 p \\mathbf{p} p 的加密形式为: q ≡ A p ( m o d 26 ) \\mathbf{q}\\equiv A\\mathbf{p}\\pmod{26} q≡Ap(mod26) 其中 q \\mathbf{q} q 是密文向量, ( m o d 26 ) \\pmod{26} (mod26) 表示每个分量都对 26 26 26 取模,使结果仍然落在 0 0 0 到 25 25 25 之间。 解密时,只需用 A A A 在模 26 26 26 意义下的逆矩阵 A − 1 A\^{-1} A−1 左乘密文向量: p ≡ A − 1 q ( m o d 26 ) \\mathbf{p}\\equiv A\^{-1}\\mathbf{q}\\pmod{26} p≡A−1q(mod26) **解析二:密钥矩阵必须在模 26 26 26 意义下可逆。** 由于英文字母与 0 0 0 到 25 25 25 之间的整数一一对应,所以加密或解密后的结果都必须仍然是 0 0 0 到 25 25 25 之间的整数。矩阵乘法后可能得到超过 25 25 25 的数,因此需要对 26 26 26 取模。 但是,仅仅取模还不够。为了能够解密,矩阵 A A A 必须存在模 26 26 26 意义下的逆矩阵。由线性代数可知: A − 1 = A ∗ det ( A ) A\^{-1}=\\dfrac{A\^\*}{\\det(A)} A−1=det(A)A∗ 其中 A ∗ A\^\* A∗ 是 A A A 的伴随矩阵。如果直接使用普通意义下的逆矩阵,元素中可能出现分数。为了在整数模运算中处理除法,需要引入同余意义下的逆元。 若整数 a a a 存在整数 a − 1 a\^{-1} a−1,使得: a a − 1 ≡ 1 ( m o d 26 ) aa\^{-1}\\equiv1\\pmod{26} aa−1≡1(mod26) 则称 a − 1 a\^{-1} a−1 为 a a a 在模 26 26 26 意义下的逆元。一个整数 a a a 存在模 26 26 26 逆元的充要条件是: gcd ( a , 26 ) = 1 \\gcd(a,26)=1 gcd(a,26)=1 因此,一个矩阵能够作为希尔密码的密钥矩阵,必须满足: gcd ( det ( A ) , 26 ) = 1 \\gcd(\\det(A),26)=1 gcd(det(A),26)=1 也就是说, det ( A ) \\det(A) det(A) 必须在模 26 26 26 意义下有逆元。 在 0 0 0 到 25 25 25 中,除 13 13 13 以外的奇数都与 26 26 26 互素,因此它们有模 26 26 26 逆元。常用逆元表如下: | a a a | 1 | 3 | 5 | 7 | 9 | 11 | 15 | 17 | 19 | 21 | 23 | 25 | |:-----------------:|:-:|:-:|:--:|:--:|:-:|:--:|:--:|:--:|:--:|:--:|:--:|:--:| | a − 1 a\^{-1} a−1 | 1 | 9 | 21 | 15 | 3 | 19 | 7 | 23 | 11 | 5 | 17 | 25 | **解析三:希尔密码的加密过程。** 希尔密码加密的一般步骤如下: 1. 选择一个 n n n 阶可逆矩阵 A A A 作为加密矩阵; 2. 将明文字符按顺序分成若干组; 3. 将每组字符转换成对应的整数列向量; 4. 用加密矩阵 A A A 左乘每一个列向量; 5. 将所得新向量的每个分量对 26 26 26 取模; 6. 将新向量中的整数重新转换成字符,得到密文。 解密过程与加密过程相反,即用 A − 1 A\^{-1} A−1 左乘密文向量,并对 26 26 26 取模。 **例 1:取 A = 3 A=3 A=3,用希尔密码体系加密语句 THANK YOU。** 先将 THANK YOU 转换为对应数字: ( 20 , 8 , 1 , 14 , 11 , 25 , 15 , 21 ) (20,\\ 8,\\ 1,\\ 14,\\ 11,\\ 25,\\ 15,\\ 21) (20, 8, 1, 14, 11, 25, 15, 21) 每个分量乘以 3 3 3,并对 26 26 26 取模,得到: ( 8 , 24 , 3 , 16 , 7 , 23 , 19 , 11 ) (8,\\ 24,\\ 3,\\ 16,\\ 7,\\ 23,\\ 19,\\ 11) (8, 24, 3, 16, 7, 23, 19, 11) 再将数字转换回字母,得到密文: HXCPG WSK \\text{HXCPG WSK} HXCPG WSK 因为: 3 ⋅ 9 = 27 ≡ 1 ( m o d 26 ) 3\\cdot9=27\\equiv1\\pmod{26} 3⋅9=27≡1(mod26) 所以 3 3 3 在模 26 26 26 意义下的逆元是 9 9 9。解密时,只需将密文对应数字乘以 9 9 9,并对 26 26 26 取模,即可还原明文。 **例 2:取加密矩阵 A = \[ 1 2 0 3 \] A=\\begin{bmatrix}1\&2\\\\0\&3\\end{bmatrix} A=\[1023\],加密 THANK YOU。** 设加密矩阵为: A = \[ 1 2 0 3 \] A= \\begin{bmatrix} 1 \& 2\\\\ 0 \& 3 \\end{bmatrix} A=\[1023
它在模 26 26 26 意义下的逆矩阵为:
A − 1 = [ 1 8 0 9 ] A^{-1}= \begin{bmatrix} 1 & 8\\ 0 & 9 \end{bmatrix} A−1=[1089]
将 THANK YOU 转换成数字,并每两个字母分成一组,得到列向量:
20 8 \] , \[ 1 14 \] , \[ 11 25 \] , \[ 15 21 \] \\begin{bmatrix} 20\\\\ 8 \\end{bmatrix}, \\quad \\begin{bmatrix} 1\\\\ 14 \\end{bmatrix}, \\quad \\begin{bmatrix} 11\\\\ 25 \\end{bmatrix}, \\quad \\begin{bmatrix} 15\\\\ 21 \\end{bmatrix} \[208\],\[114\],\[1125\],\[1521
分别用矩阵 A A A 左乘,并对 26 26 26 取模。第一组为:
A [ 20 8 ] = [ 1 2 0 3 ] [ 20 8 ] = [ 36 24 ] ≡ [ 10 24 ] ( m o d 26 ) \begin{aligned} A \begin{bmatrix} 20\\ 8 \end{bmatrix} &= \begin{bmatrix} 1 & 2\\ 0 & 3 \end{bmatrix} \begin{bmatrix} 20\\ 8 \end{bmatrix}\\ &= \begin{bmatrix} 36\\ 24 \end{bmatrix}\\ &\equiv \begin{bmatrix} 10\\ 24 \end{bmatrix} \pmod{26} \end{aligned} A[208]=[1023][208]=[3624]≡[1024](mod26)
第二组为:
A [ 1 14 ] = [ 1 2 0 3 ] [ 1 14 ] = [ 29 42 ] ≡ [ 3 16 ] ( m o d 26 ) \begin{aligned} A \begin{bmatrix} 1\\ 14 \end{bmatrix} &= \begin{bmatrix} 1 & 2\\ 0 & 3 \end{bmatrix} \begin{bmatrix} 1\\ 14 \end{bmatrix}\\ &= \begin{bmatrix} 29\\ 42 \end{bmatrix}\\ &\equiv \begin{bmatrix} 3\\ 16 \end{bmatrix} \pmod{26} \end{aligned} A[114]=[1023][114]=[2942]≡[316](mod26)
第三组为:
A [ 11 25 ] = [ 1 2 0 3 ] [ 11 25 ] = [ 61 75 ] ≡ [ 9 23 ] ( m o d 26 ) \begin{aligned} A \begin{bmatrix} 11\\ 25 \end{bmatrix} &= \begin{bmatrix} 1 & 2\\ 0 & 3 \end{bmatrix} \begin{bmatrix} 11\\ 25 \end{bmatrix}\\ &= \begin{bmatrix} 61\\ 75 \end{bmatrix}\\ &\equiv \begin{bmatrix} 9\\ 23 \end{bmatrix} \pmod{26} \end{aligned} A[1125]=[1023][1125]=[6175]≡[923](mod26)
第四组为:
A [ 15 21 ] = [ 1 2 0 3 ] [ 15 21 ] = [ 57 63 ] ≡ [ 5 11 ] ( m o d 26 ) \begin{aligned} A \begin{bmatrix} 15\\ 21 \end{bmatrix} &= \begin{bmatrix} 1 & 2\\ 0 & 3 \end{bmatrix} \begin{bmatrix} 15\\ 21 \end{bmatrix}\\ &= \begin{bmatrix} 57\\ 63 \end{bmatrix}\\ &\equiv \begin{bmatrix} 5\\ 11 \end{bmatrix} \pmod{26} \end{aligned} A[1521]=[1023][1521]=[5763]≡[511](mod26)
因此得到密文数字:
10 24 \] , \[ 3 16 \] , \[ 9 23 \] , \[ 5 11 \] \\begin{bmatrix} 10\\\\ 24 \\end{bmatrix}, \\quad \\begin{bmatrix} 3\\\\ 16 \\end{bmatrix}, \\quad \\begin{bmatrix} 9\\\\ 23 \\end{bmatrix}, \\quad \\begin{bmatrix} 5\\\\ 11 \\end{bmatrix} \[1024\],\[316\],\[923\],\[511
转换为字母后,得到密文:
JXCPIWEK \text{JXCPIWEK} JXCPIWEK
解密时,用 A − 1 A^{-1} A−1 左乘密文向量。例如:
A − 1 [ 10 24 ] = [ 1 8 0 9 ] [ 10 24 ] = [ 202 216 ] ≡ [ 20 8 ] ( m o d 26 ) \begin{aligned} A^{-1} \begin{bmatrix} 10\\ 24 \end{bmatrix} &= \begin{bmatrix} 1 & 8\\ 0 & 9 \end{bmatrix} \begin{bmatrix} 10\\ 24 \end{bmatrix}\\ &= \begin{bmatrix} 202\\ 216 \end{bmatrix}\\ &\equiv \begin{bmatrix} 20\\ 8 \end{bmatrix} \pmod{26} \end{aligned} A−1[1024]=[1089][1024]=[202216]≡[208](mod26)
这就还原出原来的第一组明文字母 TH。其它分组同理,可以恢复 THANK YOU。
解析四:逆矩阵可以用公式法或高斯消去法求得。
以:
A = [ 1 2 0 3 ] A= \begin{bmatrix} 1 & 2\\ 0 & 3 \end{bmatrix} A=[1023]
为例,有:
det ( A ) = 3 \det(A)=3 det(A)=3
因为:
3 − 1 ≡ 9 ( m o d 26 ) 3^{-1}\equiv9\pmod{26} 3−1≡9(mod26)
所以:
A − 1 ≡ 9 A ∗ ( m o d 26 ) A^{-1}\equiv9A^*\pmod{26} A−1≡9A∗(mod26)
而:
A ∗ = [ 3 − 2 0 1 ] A^*= \begin{bmatrix} 3 & -2\\ 0 & 1 \end{bmatrix} A∗=[30−21]
因此:
A − 1 ≡ 9 [ 3 − 2 0 1 ] ( m o d 26 ) = [ 27 − 18 0 9 ] ( m o d 26 ) ≡ [ 1 8 0 9 ] ( m o d 26 ) \begin{aligned} A^{-1} &\equiv 9 \begin{bmatrix} 3 & -2\\ 0 & 1 \end{bmatrix} \pmod{26}\\ &= \begin{bmatrix} 27 & -18\\ 0 & 9 \end{bmatrix} \pmod{26}\\ &\equiv \begin{bmatrix} 1 & 8\\ 0 & 9 \end{bmatrix} \pmod{26} \end{aligned} A−1≡9[30−21](mod26)=[270−189](mod26)≡[1089](mod26)
也可以用高斯消去法。将 ( A , E ) (A,E) (A,E) 写成增广矩阵:
1 2 1 0 0 3 0 1 \] \\left\[ \\begin{array}{cc\|cc} 1 \& 2 \& 1 \& 0\\\\ 0 \& 3 \& 0 \& 1 \\end{array} \\right\] \[10231001
第二行乘以 9 9 9 并对 26 26 26 取模,得到:
1 2 1 0 0 1 0 9 \] \\left\[ \\begin{array}{cc\|cc} 1 \& 2 \& 1 \& 0\\\\ 0 \& 1 \& 0 \& 9 \\end{array} \\right\] \[10211009
第一行减去第二行的 2 2 2 倍,并对 26 26 26 取模,得到:
1 0 1 8 0 1 0 9 \] \\left\[ \\begin{array}{cc\|cc} 1 \& 0 \& 1 \& 8\\\\ 0 \& 1 \& 0 \& 9 \\end{array} \\right\] \[10011089
左端矩阵已经化为单位矩阵,所以右端矩阵就是:
A − 1 = [ 1 8 0 9 ] A^{-1}= \begin{bmatrix} 1 & 8\\ 0 & 9 \end{bmatrix} A−1=[1089]
解析五:破译与解密不同,破译的关键在于获得密钥矩阵。
解密是在已知密钥矩阵 A A A 的条件下,用 A − 1 A^{-1} A−1 将密文还原为明文;而破译是在不知道密钥的情况下,根据密文长度、文字特征、行文习惯等信息推测密钥。
破译希尔密码时,关键是猜测或确定以下信息:
- 明文被分成几维向量,即分组长度 n n n;
- 字母表和数字之间的对应方式;
- 密钥矩阵 A A A。
如果已经知道部分明文和对应密文,可以利用矩阵方程求出密钥矩阵。设第 i i i 组明文列向量为 p i \mathbf{p}_i pi,对应的密文列向量为 q i \mathbf{q}_i qi,单组加密关系为:
q i = A p i \mathbf{q}_i=A\mathbf{p}_i qi=Api
若按行向量形式表示,即把每组明文和密文都横向排列成一行,设:
P = [ p 1 T p 2 T ⋮ p n T ] , Q = [ q 1 T q 2 T ⋮ q n T ] P= \begin{bmatrix} \mathbf{p}_1^T\\ \mathbf{p}_2^T\\ \vdots\\ \mathbf{p}_n^T \end{bmatrix}, \quad Q= \begin{bmatrix} \mathbf{q}_1^T\\ \mathbf{q}_2^T\\ \vdots\\ \mathbf{q}_n^T \end{bmatrix} P= p1Tp2T⋮pnT ,Q= q1Tq2T⋮qnT
由于:
q i = A p i \mathbf{q}_i=A\mathbf{p}_i qi=Api
两边转置得:
q i T = p i T A T \mathbf{q}_i^T=\mathbf{p}_i^TA^T qiT=piTAT
所以整体矩阵关系为:
Q = P A T Q=PA^T Q=PAT
若 P P P 在模 26 26 26 意义下可逆,则:
A T ≡ P − 1 Q ( m o d 26 ) A^T\equiv P^{-1}Q\pmod{26} AT≡P−1Q(mod26)
从而:
A ≡ ( P − 1 Q ) T ( m o d 26 ) A\equiv (P^{-1}Q)^T\pmod{26} A≡(P−1Q)T(mod26)
也可以按照 PPT 中的思路,从:
Q = P A T Q=PA^T Q=PAT
推出:
P = Q ( A T ) − 1 P=Q(A^T)^{-1} P=Q(AT)−1
在实际计算中,可以构造增广矩阵:
Q , P \] \[Q,\\ P\] \[Q, P
经过一系列初等行变换,把由密文决定的矩阵 Q Q Q 化为单位矩阵 I I I,则右端矩阵会相应变为 ( A T ) − 1 (A^T)^{-1} (AT)−1:
Q , P \] ⟶ \[ I , ( A T ) − 1 \] \[Q,\\ P\]\\longrightarrow \[I,\\ (A\^T)\^{-1}\] \[Q, P\]⟶\[I, (AT)−1
再对 ( A T ) − 1 (A^T)^{-1} (AT)−1 求逆并转置,就可以得到密钥矩阵 A A A。
若按列向量 形式表示,即把每组明文和密文都作为列向量并排放入矩阵,设:
P = [ p 1 p 2 ⋯ p n ] , Q = [ q 1 q 2 ⋯ q n ] P= \begin{bmatrix} \mathbf{p}_1 & \mathbf{p}_2 & \cdots & \mathbf{p}_n \end{bmatrix}, \quad Q= \begin{bmatrix} \mathbf{q}_1 & \mathbf{q}_2 & \cdots & \mathbf{q}_n \end{bmatrix} P=[p1p2⋯pn],Q=[q1q2⋯qn]由于每一组都满足:
q i = A p i \mathbf{q}_i=A\mathbf{p}_i qi=Api所以整体矩阵关系为:
Q = A P Q=AP Q=AP若 P P P 在模 26 26 26 意义下可逆,则:
A ≡ Q P − 1 ( m o d 26 ) A\equiv QP^{-1}\pmod{26} A≡QP−1(mod26)行初等变换时,增广矩阵应写成:
P T , Q T \] ⟶ \[ I , A T \] \[P\^T,\\ Q\^T\] \\longrightarrow \[I,\\ A\^T\] \[PT, QT\]⟶\[I, AT
然后转置右端,得到 AAA。
因此,行向量写法和列向量写法都可以。区别只在于矩阵排列方式不同:行向量写法中公式为 Q = P A T Q=PA^T Q=PAT,列向量写法中公式为 Q = A P Q=AP Q=AP。实际使用时只要前后一致即可。
实际上,笔者认为,更简单点(以行向量写法为例),可以直接用
Q = P A T Q=PA^T Q=PAT两边同时左乘 P − 1 P^{-1} P−1 得到
P − 1 Q ≡ A T ( m o d 26 ) P^{-1}Q\equiv A^T\pmod{26} P−1Q≡AT(mod26)因此 A ≡ ( P − 1 Q ) T ( m o d 26 ) A\equiv (P^{-1}Q)^T\pmod{26} A≡(P−1Q)T(mod26)
需要注意的是,这种直接左乘 P − 1 P^{-1} P−1 的做法要求 P P P 在模 26 26 26 意义下可逆且 P P P 是方阵。PPT 中构造 [ Q , P ] [Q,\ P] [Q, P] 的增广矩阵方法并不能绕开这个限制,因为它要求 Q Q Q 在模 26 26 26 意义下可逆且 Q Q Q 是方阵。对于标准希尔密码,由于密钥矩阵本身可逆, P P P 可逆与 Q Q Q 可逆本质上是等价的。因此,若所选明文分组不能构成可逆矩阵,应重新选择足够多且线性独立的明文-密文分组;否则密钥矩阵可能无法唯一确定。
结论:希尔密码把线性代数中的矩阵乘法、逆矩阵和模运算结合起来,实现了比简单移位密码更复杂的加密方式;其安全性主要依赖于密钥矩阵的选择以及破译者能否获得足够的明文-密文对应信息。
4、森林管理问题
题目:森林中的树木每年都要有一批被砍伐出售。为了使森林不被耗尽且每年都有所收获,每当砍伐一棵树时,应就地补种一棵幼苗,使森林树木总数保持不变。被出售树木的价值取决于树木高度。开始时森林中的树木有不同高度。希望找到一个方案,在维持持续收获的前提下,如何砍伐树木,才能使被砍伐树木获得最大的经济价值?
解析一:先按照高度对森林中的树木进行分类。
把森林中的树木按照高度分为 n n n 类。第 k k k 类树木的高度区间为:
h k − 1 , h k \] , 1 ≤ k \< n \[h_{k-1},h_k\],\\quad 1\\le k\ 由于幼苗没有经济价值,所以: p 1 = 0 p_1=0 p1=0 第 n n n 类树木的高度区间为: h n − 1 , + ∞ ) \[h_{n-1},+\\infty) \[hn−1,+∞)
**解析二:建立森林持续收获模型的基本假设。**
为了使模型便于分析,作如下假设:
1. 每年对森林中的树木砍伐一次,留下的树木和补种的幼苗经过一年的生长期后,与上一次砍伐前的高度状态相同;
2. 在一年的生长期内,树木最多只能生长一个高度级,即第 k k k 类树木可能进入第 k + 1 k+1 k+1 类,也可能仍停留在第 k k k 类;
3. 树木没有自然死亡。
记:
x k ( t ) , k = 1 , 2 , ⋯ , n x_k(t),\\quad k=1,2,\\cdots,n xk(t),k=1,2,⋯,n
为第 t t t 年第 k k k 类树木的数量;记:
y k , k = 1 , 2 , ⋯ , n y_k,\\quad k=1,2,\\cdots,n yk,k=1,2,⋯,n
为第 k k k 类树木被砍伐的数量。
设 g k g_k gk 是经过一年后,第 k k k 类树木长高到第 k + 1 k+1 k+1 类中的比例,其中:
0 \< g k \< 1 0\