手動反爬蟲:原博地址
知識梳理不易,請尊重勞動成果,文章僅發佈在CSDN網站上,在其他網站看到該博文均屬於未經作者授權的惡意爬取信息
如若轉載,請標明出處,謝謝!
1 範德蒙德行列式
D = ∣ 1 1 . . . 1 1 x 1 x 2 . . . x n − 1 x n ( x 1 ) 2 ( x 2 ) 2 . . . ( x n − 1 ) 2 ( x n ) 2 . . . . . . . . . . . . . . . ( x 1 ) n − 2 ( x 2 ) n − 2 . . . ( x n − 1 ) n − 2 ( x n ) n − 2 ( x 1 ) n − 1 ( x 2 ) n − 1 . . . ( x n − 1 ) n − 1 ( x n ) n − 1 ∣ = ∏ 1 ⩽ j < i ⩽ n ( x i − x j ) D = \begin{vmatrix}1&1 &...& 1& 1\\x_{1}&x_{2} &... & x_{n-1}&x_{n} \\(x_{1})^{2}&(x_{2})^{2} &... & (x_{n-1})^{2}&(x_{n})^{2}\\... & ...&... &...&... \\ (x_{1})^{n-2}&(x_{2})^{n-2} &... & (x_{n-1})^{n-2}&(x_{n})^{n-2}\\(x_{1})^{n-1}&(x_{2})^{n-1} &... & (x_{n-1})^{n-1}&(x_{n})^{n-1}\end{vmatrix} = \prod_{1\leqslant j <i \leqslant n }(x_{i} - x_{j}) D = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 x 1 ( x 1 ) 2 . . . ( x 1 ) n − 2 ( x 1 ) n − 1 1 x 2 ( x 2 ) 2 . . . ( x 2 ) n − 2 ( x 2 ) n − 1 . . . . . . . . . . . . . . . . . . 1 x n − 1 ( x n − 1 ) 2 . . . ( x n − 1 ) n − 2 ( x n − 1 ) n − 1 1 x n ( x n ) 2 . . . ( x n ) n − 2 ( x n ) n − 1 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ = 1 ⩽ j < i ⩽ n ∏ ( x i − x j )
簡單證明
①當n=2時,顯然成立
②當n>2時,採用由下往上相鄰兩行的上一行乘以− x 1 -x_{1} − x 1 加到下一行,將第一列全部化爲0
③這時候就變成了加邊法後的結果了,直接可以去掉“加的邊”,此時行列式的階數就由原來的n階變成n-1階了
④然後發現每一列都存在着公因式,因此可以進行提取因式
⑤最後就發現提取的公因式正是j=1時候的表達式相乘,而後面的是在j>1時候的表達式,因此就得證
D = ∣ 1 1 . . . 1 1 x 1 x 2 . . . x n − 1 x n ( x 1 ) 2 ( x 2 ) 2 . . . ( x n − 1 ) 2 ( x n ) 2 . . . . . . . . . . . . . . . ( x 1 ) n − 2 ( x 2 ) n − 2 . . . ( x n − 1 ) n − 2 ( x n ) n − 2 ( x 1 ) n − 1 ( x 2 ) n − 1 . . . ( x n − 1 ) n − 1 ( x n ) n − 1 ∣ D = \begin{vmatrix}1&1 &...& 1& 1\\x_{1}&x_{2} &... & x_{n-1}&x_{n} \\(x_{1})^{2}&(x_{2})^{2} &... & (x_{n-1})^{2}&(x_{n})^{2}\\... & ...&... &...&... \\ (x_{1})^{n-2}&(x_{2})^{n-2} &... & (x_{n-1})^{n-2}&(x_{n})^{n-2}\\(x_{1})^{n-1}&(x_{2})^{n-1} &... & (x_{n-1})^{n-1}&(x_{n})^{n-1}\end{vmatrix} D = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 x 1 ( x 1 ) 2 . . . ( x 1 ) n − 2 ( x 1 ) n − 1 1 x 2 ( x 2 ) 2 . . . ( x 2 ) n − 2 ( x 2 ) n − 1 . . . . . . . . . . . . . . . . . . 1 x n − 1 ( x n − 1 ) 2 . . . ( x n − 1 ) n − 2 ( x n − 1 ) n − 1 1 x n ( x n ) 2 . . . ( x n ) n − 2 ( x n ) n − 1 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣
= ∣ 1 1 . . . 1 1 0 x 2 − x 1 . . . x n − 1 − x 1 x n − x 1 0 ( x 2 ) 2 − x 1 x 2 . . . ( x n − 1 ) 2 − x 1 x n − 1 ( x n ) 2 − x 1 x n . . . . . . . . . . . . . . . 0 ( x 2 ) n − 2 − x 1 ( x 2 ) n − 3 . . . ( x n − 1 ) n − 2 − x 1 ( x n − 1 ) n − 3 ( x n ) n − 2 − x 1 ( x n ) n − 3 0 ( x 2 ) n − 1 − x 1 ( x 2 ) n − 2 . . . ( x n − 1 ) n − 1 − x 1 ( x n − 1 ) n − 2 ( x n ) n − 1 − x 1 ( x n ) n − 2 ∣ = \text{ } \text{ } \text{ }\begin{vmatrix}1&1 &...& 1& 1\\0&x_{2} -x_{1}&... & x_{n-1}-x_{1}&x_{n}-x_{1} \\0&(x_{2})^{2} -x_{1}x_{2}&... & (x_{n-1})^{2} -x_{1}x_{n-1}&(x_{n})^{2}-x_{1}x_{n}\\... & ...&... &...&... \\ 0&(x_{2})^{n-2}-x_{1}(x_{2})^{n-3} &... & (x_{n-1})^{n-2}-x_{1}(x_{n-1})^{n-3}&(x_{n})^{n-2}-x_{1}(x_{n})^{n-3}\\0&(x_{2})^{n-1} -x_{1}(x_{2})^{n-2}&... & (x_{n-1})^{n-1}-x_{1}(x_{n-1})^{n-2}&(x_{n})^{n-1}-x_{1}(x_{n})^{n-2}\end{vmatrix} = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 0 0 . . . 0 0 1 x 2 − x 1 ( x 2 ) 2 − x 1 x 2 . . . ( x 2 ) n − 2 − x 1 ( x 2 ) n − 3 ( x 2 ) n − 1 − x 1 ( x 2 ) n − 2 . . . . . . . . . . . . . . . . . . 1 x n − 1 − x 1 ( x n − 1 ) 2 − x 1 x n − 1 . . . ( x n − 1 ) n − 2 − x 1 ( x n − 1 ) n − 3 ( x n − 1 ) n − 1 − x 1 ( x n − 1 ) n − 2 1 x n − x 1 ( x n ) 2 − x 1 x n . . . ( x n ) n − 2 − x 1 ( x n ) n − 3 ( x n ) n − 1 − x 1 ( x n ) n − 2 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣
= ∣ x 2 − x 1 . . . x n − 1 − x 1 x n − x 1 ( x 2 ) 2 − x 1 x 2 . . . ( x n − 1 ) 2 − x 1 x n − 1 ( x n ) 2 − x 1 x n . . . . . . . . . . . . ( x 2 ) n − 2 − x 1 ( x 2 ) n − 3 . . . ( x n − 1 ) n − 2 − x 1 ( x n − 1 ) n − 3 ( x n ) n − 2 − x 1 ( x n ) n − 3 ( x 2 ) n − 1 − x 1 ( x 2 ) n − 2 . . . ( x n − 1 ) n − 1 − x 1 ( x n − 1 ) n − 2 ( x n ) n − 1 − x 1 ( x n ) n − 2 ∣ = \text{ } \text{ } \text{ }\begin{vmatrix}\\x_{2} -x_{1}&... & x_{n-1}-x_{1}&x_{n}-x_{1} \\(x_{2})^{2} -x_{1}x_{2}&... & (x_{n-1})^{2} -x_{1}x_{n-1}&(x_{n})^{2}-x_{1}x_{n}\\ ...&... &...&... \\ (x_{2})^{n-2}-x_{1}(x_{2})^{n-3} &... & (x_{n-1})^{n-2}-x_{1}(x_{n-1})^{n-3}&(x_{n})^{n-2}-x_{1}(x_{n})^{n-3}\\(x_{2})^{n-1} -x_{1}(x_{2})^{n-2}&... & (x_{n-1})^{n-1}-x_{1}(x_{n-1})^{n-2}&(x_{n})^{n-1}-x_{1}(x_{n})^{n-2}\end{vmatrix} = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ x 2 − x 1 ( x 2 ) 2 − x 1 x 2 . . . ( x 2 ) n − 2 − x 1 ( x 2 ) n − 3 ( x 2 ) n − 1 − x 1 ( x 2 ) n − 2 . . . . . . . . . . . . . . . x n − 1 − x 1 ( x n − 1 ) 2 − x 1 x n − 1 . . . ( x n − 1 ) n − 2 − x 1 ( x n − 1 ) n − 3 ( x n − 1 ) n − 1 − x 1 ( x n − 1 ) n − 2 x n − x 1 ( x n ) 2 − x 1 x n . . . ( x n ) n − 2 − x 1 ( x n ) n − 3 ( x n ) n − 1 − x 1 ( x n ) n − 2 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣
= ( x 2 − x 1 ) ( x 2 − x 1 ) . . . ( x n − x 1 ) ∣ 1 . . . 1 1 x 2 . . . x n − 1 x n ( x 2 ) 2 . . . ( x n − 1 ) 2 ( x n ) 2 . . . . . . . . . . . . ( x 2 ) n − 2 . . . ( x n − 1 ) n − 2 ( x n ) n − 2 ( x 2 ) n − 1 . . . ( x n − 1 ) n − 1 ( x n ) n − 1 ∣ n − 1 = \text{ } \text{ } \text{ }(x_{2} -x_{1})(x_{2} -x_{1})...(x_{n} -x_{1})\begin{vmatrix}1 &...& 1& 1\\x_{2} &... & x_{n-1}&x_{n} \\(x_{2})^{2} &... & (x_{n-1})^{2}&(x_{n})^{2}\\...&... &...&... \\ (x_{2})^{n-2} &... & (x_{n-1})^{n-2}&(x_{n})^{n-2}\\(x_{2})^{n-1} &... & (x_{n-1})^{n-1}&(x_{n})^{n-1}\end{vmatrix}_{n-1} = ( x 2 − x 1 ) ( x 2 − x 1 ) . . . ( x n − x 1 ) ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 x 2 ( x 2 ) 2 . . . ( x 2 ) n − 2 ( x 2 ) n − 1 . . . . . . . . . . . . . . . . . . 1 x n − 1 ( x n − 1 ) 2 . . . ( x n − 1 ) n − 2 ( x n − 1 ) n − 1 1 x n ( x n ) 2 . . . ( x n ) n − 2 ( x n ) n − 1 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ n − 1
= ( x 2 − x 1 ) ( x 2 − x 1 ) . . . ( x n − x 1 ) ∏ 2 ⩽ j < i ⩽ n ( x i − x j ) = ∏ 1 ⩽ j < i ⩽ n ( x i − x j ) = \text{ } \text{ } \text{ }(x_{2} -x_{1})(x_{2} -x_{1})...(x_{n} -x_{1}) \prod_{2\leqslant j <i \leqslant n }(x_{i} - x_{j}) \text{ } \text{ } \text{ }= \text{ } \text{ } \text{ } \prod_{1\leqslant j <i \leqslant n }(x_{i} - x_{j}) = ( x 2 − x 1 ) ( x 2 − x 1 ) . . . ( x n − x 1 ) 2 ⩽ j < i ⩽ n ∏ ( x i − x j ) = 1 ⩽ j < i ⩽ n ∏ ( x i − x j )
5階行列範德蒙德展開
①當j=1時,i = 2,3,4,5
②當j=2時,i = 3,4,5
③當j=3時,i = 4,5
④當j=4時,i = 5
⑤最後展開一共十項
∣ 1 1 1 1 1 x 1 x 2 x 3 x 4 x 5 ( x 1 ) 2 ( x 2 ) 2 ( x 3 ) 2 ( x 4 ) 2 ( x 5 ) 2 ( x 1 ) 3 ( x 2 ) 3 ( x 3 ) 3 ( x 4 ) 3 ( x 5 ) 3 ( x 1 ) 4 ( x 2 ) 4 ( x 2 ) 4 ( x 4 ) 4 ( x 5 ) 4 ∣ \begin{vmatrix}1&1 &1& 1& 1\\x_{1}&x_{2} &x_{3}& x_{4}&x_{5} \\(x_{1})^{2}&(x_{2})^{2} &(x_{3})^{2}& (x_{4})^{2}&(x_{5})^{2}\\ (x_{1})^{3}&(x_{2})^{3} &(x_{3})^{3} & (x_{4})^{3}&(x_{5})^{3}\\(x_{1})^{4}&(x_{2})^{4} &(x_{2})^{4} & (x_{4})^{4}&(x_{5})^{4}\end{vmatrix} ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 x 1 ( x 1 ) 2 ( x 1 ) 3 ( x 1 ) 4 1 x 2 ( x 2 ) 2 ( x 2 ) 3 ( x 2 ) 4 1 x 3 ( x 3 ) 2 ( x 3 ) 3 ( x 2 ) 4 1 x 4 ( x 4 ) 2 ( x 4 ) 3 ( x 4 ) 4 1 x 5 ( x 5 ) 2 ( x 5 ) 3 ( x 5 ) 4 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣
= ( x 2 − x 1 ) ( x 3 − x 1 ) ( x 4 − x 1 ) ( x 5 − x 1 ) ( x 3 − x 2 ) ( x 4 − x 2 ) ( x 5 − x 2 ) ( x 4 − x 3 ) ( x 5 − x 3 ) ( x 5 − x 4 ) = \text{ } \text{ } \text{ } (x_{2}-x_{1})(x_{3}-x_{1})(x_{4}-x_{1})(x_{5}-x_{1})(x_{3}-x_{2})(x_{4}-x_{2})(x_{5}-x_{2})(x_{4}-x_{3})(x_{5}-x_{3})(x_{5}-x_{4}) = ( x 2 − x 1 ) ( x 3 − x 1 ) ( x 4 − x 1 ) ( x 5 − x 1 ) ( x 3 − x 2 ) ( x 4 − x 2 ) ( x 5 − x 2 ) ( x 4 − x 3 ) ( x 5 − x 3 ) ( x 5 − x 4 )
小示例
∣ 1 1 1 1 1 5 − 1 3 2 4 25 1 9 4 16 125 − 1 27 8 64 625 1 81 16 256 ∣ \begin{vmatrix}1&1 &1& 1& 1\\5&-1 &3& 2&4 \\25&1 &9& 4&16\\125&-1&27&8&64\\ 625&1&81 &16&256\end{vmatrix} ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ 1 5 2 5 1 2 5 6 2 5 1 − 1 1 − 1 1 1 3 9 2 7 8 1 1 2 4 8 1 6 1 4 1 6 6 4 2 5 6 ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣
= ( − 1 − 5 ) ( 3 − 5 ) ( 2 − 5 ) ( 4 − 5 ) ( 3 + 1 ) ( 2 + 1 ) ( 4 + 1 ) ( 2 − 3 ) ( 4 − 3 ) ( 4 − 2 ) = − 4320 =(-1-5)(3-5)(2-5)(4-5)(3+1)(2+1)(4+1)(2-3)(4-3)(4-2)=-4320 = ( − 1 − 5 ) ( 3 − 5 ) ( 2 − 5 ) ( 4 − 5 ) ( 3 + 1 ) ( 2 + 1 ) ( 4 + 1 ) ( 2 − 3 ) ( 4 − 3 ) ( 4 − 2 ) = − 4 3 2 0
python代碼實現
import numpy as np
from numpy. linalg import *
mydet= np. array( [ [ 1 , 1 , 1 , 1 , 1 ] , [ 5 , - 1 , 3 , 2 , 4 ] , [ 25 , 1 , 9 , 4 , 16 ] , [ 125 , - 1 , 27 , 8 , 64 ] , [ 625 , 1 , 81 , 16 , 256 ] ] )
print ( det( mydet) )
→ 輸出的結果爲:(驗證無誤)
- 4320.000000000022
2 克萊姆法則
注意克萊姆法則使用的前提條件:方程的個數等於未知數的個數
係數行列式:就是把方程組裏面未知數的係數拿出來組成的行列式,比如下面方程組的係數行列式如下
{ x 1 + x 2 + x 3 = 7 x 1 − x 2 + 5 x 3 = 6 − x 1 + x 2 + 6 x 3 = 9 ⇒ D = ∣ 1 1 1 1 − 1 5 − 1 1 6 ∣ \begin{cases}
x_{1}+x_{2} + x_{3} =7 \\
x_{1}-x_{2}+5x_{3}=6\\
-x_{1} +x_{2} +6x_{3} =9
\end{cases} \text{ } \text{ } \text{ } \text{ } \text{ } \text{ } \Rightarrow \text{ } \text{ } \text{ } \text{ } \text{ } \text{ } D = \begin{vmatrix}1&1 &1\\1&-1 &5\\-1&1 &6\end{vmatrix} ⎩ ⎪ ⎨ ⎪ ⎧ x 1 + x 2 + x 3 = 7 x 1 − x 2 + 5 x 3 = 6 − x 1 + x 2 + 6 x 3 = 9 ⇒ D = ∣ ∣ ∣ ∣ ∣ ∣ 1 1 − 1 1 − 1 1 1 5 6 ∣ ∣ ∣ ∣ ∣ ∣
如果係數行列式D ! = 0 D != 0 D ! = 0 ,,那麼未知數的解就爲x j = D j D x_{j} =\frac{D_{j}}{D} x j = D D j ,其中D j D_{j} D j 是將未知數所在的列元素換成方程組等號右側的值,然後其他列的元素就是原係數行列式元素不變,注意觀察每列的變化
D 1 = ∣ 7 1 1 6 − 1 5 9 1 6 ∣ D 2 = ∣ 1 7 1 1 6 5 − 1 9 6 ∣ D 3 = ∣ 1 1 7 1 − 1 6 − 1 1 9 ∣ D_{1} = \begin{vmatrix}7&1 &1\\6&-1 &5\\9&1 &6\end{vmatrix} \text{ } \text{ } \text{ } \text{ } \text{ } \text{ }D_{2} = \begin{vmatrix}1&7 &1\\1&6 &5\\-1&9&6\end{vmatrix} \text{ } \text{ } \text{ } \text{ } \text{ } \text{ }D_{3} = \begin{vmatrix}1&1 &7\\1&-1 &6\\-1&1&9\end{vmatrix} \text{ } \text{ } \text{ } \text{ } \text{ } \text{ } D 1 = ∣ ∣ ∣ ∣ ∣ ∣ 7 6 9 1 − 1 1 1 5 6 ∣ ∣ ∣ ∣ ∣ ∣ D 2 = ∣ ∣ ∣ ∣ ∣ ∣ 1 1 − 1 7 6 9 1 5 6 ∣ ∣ ∣ ∣ ∣ ∣ D 3 = ∣ ∣ ∣ ∣ ∣ ∣ 1 1 − 1 1 − 1 1 7 6 9 ∣ ∣ ∣ ∣ ∣ ∣
故可以算出未知數的解:(很明顯發現D在分母上,所以要求係數行列式不爲0)
x 1 = D 1 D = 2.41 x 2 = D 2 D = 3.23 x 3 = D 3 D = 1.36 x_{1} = \frac{D_{1}}{D}=2.41 \text{ } \text{ } \text{ } \text{ } \text{ } \text{ }x_{2} = \frac{D_{2}}{D}= 3.23\text{ } \text{ } \text{ } \text{ } \text{ } \text{ }x_{3} = \frac{D_{3}}{D}=1.36 x 1 = D D 1 = 2 . 4 1 x 2 = D D 2 = 3 . 2 3 x 3 = D D 3 = 1 . 3 6
綜上,克萊姆法則的使用中:①方程的個數與未知數個數相等;②係數行列式的值不爲0;③計算量是非常大的,可藉助編程實現
import numpy as np
d = np. reshape( [ 1 , 1 , 1 , 1 , - 1 , 5 , - 1 , 1 , 6 ] , ( 3 , 3 ) )
d1 = np. reshape( [ 7 , 1 , 1 , 6 , - 1 , 5 , 9 , 1 , 6 ] , ( 3 , 3 ) )
d2 = np. reshape( [ 1 , 7 , 1 , 1 , 6 , 5 , - 1 , 9 , 6 ] , ( 3 , 3 ) )
d3 = np. reshape( [ 1 , 1 , 7 , 1 , - 1 , 6 , - 1 , 1 , 9 ] , ( 3 , 3 ) )
x1 = np. linalg. det( d1) / np. linalg. det( d)
x2 = np. linalg. det( d2) / np. linalg. det( d)
x3 = np. linalg. det( d3) / np. linalg. det( d)
print ( x1, x2, x3)
定理1: 如果多元方程組的右側全爲0(也稱齊次方程組),至少有零解 ,因爲直接將方程組最後的結果替換到相應的列。D i D_{i} D i 行列式的值均爲0,也就是分子爲0
定理2:對於齊次方程組,且係數行列式不爲0,那麼方程組只有零解
定理3:齊次方程組(方程個數等於未知數個數)有非零解 ⟺ D = 0 \iff D = 0 ⟺ D = 0