矩阵求逆的几种方式
矩阵求逆的几种方式(以二阶为例)
矩阵求逆的方法有多种,以下是常用的几种方式总结:
1. 行列式公式法
这是最常见的方法,适用于 2 × 2 2 \times 2 2×2矩阵。
对于矩阵:
Φ = [ a b c d ] , \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, Φ=[acbd],
其逆矩阵为:
Φ − 1 = 1 det ( Φ ) [ d − b − c a ] , \Phi^{-1} = \frac{1}{\text{det}(\Phi)} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}, Φ−1=det(Φ)1[d−c−ba],
前提是行列式 det ( Φ ) = a d − b c ≠ 0 \text{det}(\Phi) = ad - bc \neq 0 det(Φ)=ad−bc=0。
2. 伴随矩阵法
适用于任意 n × n n \times n n×n矩阵,特别是在符号化计算中常用。
步骤:
- 计算矩阵的代数余子式,构造伴随矩阵 adj ( Φ ) \text{adj}(\Phi) adj(Φ)。
- 使用公式:
Φ − 1 = 1 det ( Φ ) ⋅ adj ( Φ ) . \Phi^{-1} = \frac{1}{\text{det}(\Phi)} \cdot \text{adj}(\Phi). Φ−1=det(Φ)1⋅adj(Φ).
对于 2 × 2 2 \times 2 2×2矩阵:
adj ( Φ ) = [ d − b − c a ] . \text{adj}(\Phi) = \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}. adj(Φ)=[d−c−ba].
以下是** 2 × 2 2 \times 2 2×2矩阵伴随矩阵**的推导过程:
2.1. 伴随矩阵定义
给定矩阵:
Φ = [ a b c d ] , \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, Φ=[acbd],
伴随矩阵 adj ( Φ ) \text{adj}(\Phi) adj(Φ)是 Φ \Phi Φ的代数余子式矩阵的转置。
2.2. 求代数余子式
代数余子式 A i j A_{ij} Aij定义为:
A i j = ( − 1 ) i + j ⋅ M i j , A_{ij} = (-1)^{i+j} \cdot M_{ij}, Aij=(−1)i+j⋅Mij,
其中 M i j M_{ij} Mij是去掉矩阵 Φ \Phi Φ第 i i i行、第 j j j列后得到的余矩阵的行列式。
对于 2 × 2 2 \times 2 2×2矩阵 Φ \Phi Φ,每个代数余子式计算如下:
-
计算 A 11 A_{11} A11:
A 11 = ( − 1 ) 1 + 1 ⋅ det [ d ] = 1 ⋅ d = d . A_{11} = (-1)^{1+1} \cdot \text{det}\begin{bmatrix} d \end{bmatrix} = 1 \cdot d = d. A11=(−1)1+1⋅det[d]=1⋅d=d. -
计算 A 12 A_{12} A12:
A 12 = ( − 1 ) 1 + 2 ⋅ det [ c ] = − 1 ⋅ c = − c . A_{12} = (-1)^{1+2} \cdot \text{det}\begin{bmatrix} c \end{bmatrix} = -1 \cdot c = -c. A12=(−1)1+2⋅det[c]=−1⋅c=−c. -
计算 A 21 A_{21} A21:
A 21 = ( − 1 ) 2 + 1 ⋅ det [ b ] = − 1 ⋅ b = − b . A_{21} = (-1)^{2+1} \cdot \text{det}\begin{bmatrix} b \end{bmatrix} = -1 \cdot b = -b. A21=(−1)2+1⋅det[b]=−1⋅b=−b. -
计算 A 22 A_{22} A22:
A 22 = ( − 1 ) 2 + 2 ⋅ det [ a ] = 1 ⋅ a = a . A_{22} = (-1)^{2+2} \cdot \text{det}\begin{bmatrix} a \end{bmatrix} = 1 \cdot a = a. A22=(−1)2+2⋅det[a]=1⋅a=a.
2.3. 构造代数余子式矩阵
将上述代数余子式按原矩阵 Φ \Phi Φ的顺序排列,得到代数余子式矩阵:
代数余子式矩阵 = [ A 11 A 12 A 21 A 22 ] = [ d − c − b a ] . \text{代数余子式矩阵} = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix} =\begin{bmatrix} d & -c \\ -b & a \end{bmatrix}. 代数余子式矩阵=[A11A21A12A22]=[d−b−ca].
2.4. 求伴随矩阵
伴随矩阵是代数余子式矩阵的转置:
adj ( Φ ) = [ d − c − b a ] T = [ d − b − c a ] . \text{adj}(\Phi) = \begin{bmatrix} d & -c \\ -b & a\end{bmatrix}^T= \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}. adj(Φ)=[d−b−ca]T=[d−c−ba].
因此对于 2 × 2 2 \times 2 2×2矩阵:
Φ = [ a b c d ] , \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, Φ=[acbd],
其伴随矩阵为:
adj ( Φ ) = [ d − b − c a ] . \text{adj}(\Phi) = \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}. adj(Φ)=[d−c−ba].
3. 初等行变换法(高斯-约旦消元法)
通过将矩阵扩展为一个分块矩阵:
[ Φ ∣ I ] , [\Phi | I], [Φ∣I],
然后对左边矩阵执行初等行变换,直到其变成单位矩阵 I I I,右侧的矩阵就是逆矩阵 Φ − 1 \Phi^{-1} Φ−1。
以下是利用高斯-约旦消元法求矩阵逆矩阵的详细步骤(以 2 × 2 2 \times 2 2×2矩阵为例):
3.1. 问题描述
给定一个 2 × 2 2 \times 2 2×2矩阵:
Φ = [ a b c d ] , \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, Φ=[acbd],
目标是通过初等行变换计算其逆矩阵 Φ − 1 \Phi^{-1} Φ−1。
3.2. 扩展增广矩阵
将 Φ \Phi Φ扩展为增广矩阵:
[ Φ ∣ I ] = [ a b 1 0 c d 0 1 ] . [\Phi | I] = \begin{bmatrix} a & b & 1 & 0 \\ c & d & 0 & 1 \end{bmatrix}. [Φ∣I]=[acbd1001].
目标是通过行变换将左侧矩阵变成单位矩阵 I I I,右侧变成逆矩阵 Φ − 1 \Phi^{-1} Φ−1。
3.3 高斯-约旦消元法步骤
步骤 1:将 [ 1 , 1 ] [1,1] [1,1]位置元素变为1(主元化)
通过行变换使 a a a变为1。若 a ≠ 0 a \neq 0 a=0,直接将第1行除以 a a a:
R 1 → R 1 a , R_1 \to \frac{R_1}{a}, R1→aR1,
增广矩阵变为:
[ 1 b a 1 a 0 c d 0 1 ] . \begin{bmatrix} 1 & \frac{b}{a} & \frac{1}{a} & 0 \\ c & d & 0 & 1 \end{bmatrix}. [1cabda1001].
步骤 2:消去第2行的第1列元素
将第2行的第1列元素 c c c消为0:
R 2 → R 2 − c ⋅ R 1 , R_2 \to R_2 - c \cdot R_1, R2→R2−c⋅R1,
增广矩阵变为:
[ 1 b a 1 a 0 0 d − b c a − c a 1 ] . \begin{bmatrix} 1 & \frac{b}{a} & \frac{1}{a} & 0 \\ 0 & d - \frac{bc}{a} & -\frac{c}{a} & 1 \end{bmatrix}. [10abd−abca1−ac01].
步骤 3:将 [ 2 , 2 ] [2,2] [2,2]位置元素变为1(主元化)
通过行变换使 d − b c a d - \frac{bc}{a} d−abc变为1。若 d − b c a ≠ 0 d - \frac{bc}{a} \neq 0 d−abc=0,将第2行除以该值:
R 2 → R 2 d − b c a , R_2 \to \frac{R_2}{d - \frac{bc}{a}}, R2→d−abcR2,
增广矩阵变为:
[ 1 b a 1 a 0 0 1 − c a ( d − b c a ) 1 d − b c a ] . \begin{bmatrix} 1 & \frac{b}{a} & \frac{1}{a} & 0 \\ 0 & 1 & \frac{-c}{a(d - \frac{bc}{a})} & \frac{1}{d - \frac{bc}{a}} \end{bmatrix}. [10ab1a1a(d−abc)−c0d−abc1].
步骤 4:消去第1行的第2列元素
将第1行的第2列元素 b a \frac{b}{a} ab消为0:
R 1 → R 1 − b a ⋅ R 2 , R_1 \to R_1 - \frac{b}{a} \cdot R_2, R1→R1−ab⋅R2,
增广矩阵变为:
[ 1 0 d det ( Φ ) − b det ( Φ ) 0 1 − c det ( Φ ) a det ( Φ ) ] , \begin{bmatrix} 1 & 0 & \frac{d}{\text{det}(\Phi)} & \frac{-b}{\text{det}(\Phi)} \\ 0 & 1 & \frac{-c}{\text{det}(\Phi)} & \frac{a}{\text{det}(\Phi)} \end{bmatrix}, [1001det(Φ)ddet(Φ)−cdet(Φ)−bdet(Φ)a],
其中 det ( Φ ) = a d − b c \text{det}(\Phi) = ad - bc det(Φ)=ad−bc。
最终,左侧已变成单位矩阵 I I I,右侧即为逆矩阵 Φ − 1 \Phi^{-1} Φ−1:
Φ − 1 = 1 det ( Φ ) [ d − b − c a ] , \Phi^{-1} = \frac{1}{\text{det}(\Phi)} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}, Φ−1=det(Φ)1[d−c−ba],
前提是 det ( Φ ) ≠ 0 \text{det}(\Phi) \neq 0 det(Φ)=0。
4. 数值计算法(如LU分解法)
对于数值计算,通过矩阵分解技术(如LU分解)来求解逆矩阵:
- 将矩阵分解为 Φ = L U \Phi = LU Φ=LU的形式;
- 分别解两个三角方程,最终获得逆矩阵。
此方法更适合大规模矩阵的计算,但对于 2 × 2 2 \times 2 2×2矩阵意义有限。
以下是利用LU分解法求逆矩阵的详细步骤:
4.1. 问题描述
给定一个 2 × 2 2 \times 2 2×2矩阵:
Φ = [ a b c d ] \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix} Φ=[acbd]
目标是通过LU分解计算其逆矩阵 Φ − 1 \Phi^{-1} Φ−1。
4.2. LU分解概念
LU分解将矩阵 Φ \Phi Φ分解为下列形式:
Φ = L U , \Phi = LU, Φ=LU,
其中:
- L L L为下三角矩阵,主对角线元素为1;
- U U U为上三角矩阵。
对于 2 × 2 2 \times 2 2×2矩阵,分解过程如下:
L = [ 1 0 l 21 1 ] , U = [ u 11 u 12 0 u 22 ] . L = \begin{bmatrix} 1 & 0 \\ l_{21} & 1 \end{bmatrix}, \quad U = \begin{bmatrix} u_{11} & u_{12} \\ 0 & u_{22} \end{bmatrix}. L=[1l2101],U=[u110u12u22].
4.3. LU分解步骤
步骤 1:初始化
假设 Φ = L U \Phi = LU Φ=LU,则有:
[ a b c d ] = [ 1 0 l 21 1 ] [ u 11 u 12 0 u 22 ] . \begin{bmatrix} a & b \\ c & d \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ l_{21} & 1 \end{bmatrix} \begin{bmatrix} u_{11} & u_{12} \\ 0 & u_{22} \end{bmatrix}. [acbd]=[1l2101][u110u12u22].
通过矩阵乘法,得到:
[ a b c d ] = [ u 11 u 12 l 21 u 11 l 21 u 12 + u 22 ] . \begin{bmatrix} a & b \\ c & d \end{bmatrix} = \begin{bmatrix} u_{11} & u_{12} \\ l_{21} u_{11} & l_{21} u_{12} + u_{22} \end{bmatrix}. [acbd]=[u11l21u11u12l21u12+u22].
步骤 2:逐元素比较,确定 L L L和 U U U的元素
- 比较 [ 1 , 1 ] [1,1] [1,1]位置元素:
u 11 = a . u_{11} = a. u11=a. - 比较 [ 1 , 2 ] [1,2] [1,2]位置元素:
u 12 = b . u_{12} = b. u12=b. - 比较 [ 2 , 1 ] [2,1] [2,1]位置元素:
l 21 = c u 11 = c a . l_{21} = \frac{c}{u_{11}} = \frac{c}{a}. l21=u11c=ac. - 比较 [ 2 , 2 ] [2,2] [2,2]位置元素:
u 22 = d − l 21 u 12 = d − c a ⋅ b . u_{22} = d - l_{21} u_{12} = d - \frac{c}{a} \cdot b. u22=d−l21u12=d−ac⋅b.
最终得到:
L = [ 1 0 c a 1 ] , U = [ a b 0 d − b c a ] . L = \begin{bmatrix} 1 & 0 \\ \frac{c}{a} & 1 \end{bmatrix}, \quad U = \begin{bmatrix} a & b \\ 0 & d - \frac{bc}{a} \end{bmatrix}. L=[1ac01],U=[a0bd−abc].
4. 求逆矩阵 Φ − 1 \Phi^{-1} Φ−1
LU分解完成后,通过分块求逆的方式得到结果。
步骤 1:解 L Y = I LY = I LY=I(前向替代)
将 Φ − 1 \Phi^{-1} Φ−1分为两部分:
L Y = [ 1 0 c a 1 ] [ y 11 y 12 y 21 y 22 ] = [ 1 0 0 1 ] . LY = \begin{bmatrix} 1 & 0 \\ \frac{c}{a} & 1 \end{bmatrix} \begin{bmatrix} y_{11} & y_{12} \\ y_{21} & y_{22} \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}. LY=[1ac01][y11y21y12y22]=[1001].
逐行解得:
- 第1行:
y 11 = 1 , y 12 = 0. y_{11} = 1, \quad y_{12} = 0. y11=1,y12=0. - 第2行:
y 21 = − c a , y 22 = 1. y_{21} = -\frac{c}{a}, \quad y_{22} = 1. y21=−ac,y22=1.
因此:
Y = [ 1 0 − c a 1 ] . Y = \begin{bmatrix} 1 & 0 \\ -\frac{c}{a} & 1 \end{bmatrix}. Y=[1−ac01].
步骤 2:解 U Z = Y UZ = Y UZ=Y(后向替代)
[ a b 0 d − b c a ] [ z 11 z 12 z 21 z 22 ] = [ 1 0 − c a 1 ] . \begin{bmatrix} a & b \\ 0 & d - \frac{bc}{a} \end{bmatrix} \begin{bmatrix} z_{11} & z_{12} \\ z_{21} & z_{22} \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ -\frac{c}{a} & 1 \end{bmatrix}. [a0bd−abc][z11z21z12z22]=[1−ac01].
逐行解得:
- 第2行:
z 21 = − c a d − b c a = − c a d − b c , z 22 = 1 d − b c a = a a d − b c . z_{21} = \frac{-\frac{c}{a}}{d - \frac{bc}{a}} = \frac{-c}{ad - bc}, \quad z_{22} = \frac{1}{d - \frac{bc}{a}} = \frac{a}{ad - bc}. z21=d−abc−ac=ad−bc−c,z22=d−abc1=ad−bca. - 第1行:
z 11 = 1 − b ⋅ z 21 a = d a d − b c , z 12 = 0 − b ⋅ z 22 a = − b a d − b c . z_{11} = \frac{1 - b \cdot z_{21}}{a} = \frac{d}{ad - bc}, \quad z_{12} = \frac{0 - b \cdot z_{22}}{a} = \frac{-b}{ad - bc}. z11=a1−b⋅z21=ad−bcd,z12=a0−b⋅z22=ad−bc−b.
最终得到:
Z = [ d a d − b c − b a d − b c − c a d − b c a a d − b c ] . Z = \begin{bmatrix} \frac{d}{ad - bc} & \frac{-b}{ad - bc} \\ \frac{-c}{ad - bc} & \frac{a}{ad - bc} \end{bmatrix}. Z=[ad−bcdad−bc−cad−bc−bad−bca].
因此,逆矩阵为:
Φ − 1 = Z = 1 det ( Φ ) [ d − b − c a ] . \Phi^{-1} = Z = \frac{1}{\text{det}(\Phi)} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}. Φ−1=Z=det(Φ)1[d−c−ba].
LU分解法通过矩阵分解简化了求解逆矩阵的过程,特别是对于高维矩阵,通过分解后的前向替代和后向替代显著提高了计算效率。
5. 符号化工具或计算机软件
如使用数学软件(Matlab、NumPy)直接调用内置函数:
- NumPy:
np.linalg.inv(Phi)
- Matlab:
inv(Phi)
这类方法内部可能实现了上述的数值算法,适合工程计算。
6. 定义验证法
利用逆矩阵的定义 Φ Φ − 1 = I \Phi \Phi^{-1} = I ΦΦ−1=I,通过代数方程的形式验证或构造满足该条件的矩阵。
例如,对于简单的 2 × 2 2 \times 2 2×2矩阵,可以手动解联立方程组获得逆矩阵。
6.1. 问题描述
给定一个 2 × 2 2 \times 2 2×2矩阵:
Φ = [ a b c d ] , \Phi = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, Φ=[acbd],
我们要求矩阵 Φ \Phi Φ的逆矩阵 Φ − 1 \Phi^{-1} Φ−1,并利用定义 Φ Φ − 1 = I \Phi \Phi^{-1} = I ΦΦ−1=I来求解。
我们假设 Φ − 1 \Phi^{-1} Φ−1为:
Φ − 1 = [ x y z w ] . \Phi^{-1} = \begin{bmatrix} x & y \\ z & w \end{bmatrix}. Φ−1=[xzyw].
6.2. 利用矩阵乘法公式
根据定义 Φ Φ − 1 = I \Phi \Phi^{-1} = I ΦΦ−1=I,我们可以写出方程:
[ a b c d ] [ x y z w ] = [ 1 0 0 1 ] . \begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} x & y \\ z & w \end{bmatrix} =\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}. [acbd][xzyw]=[1001].
进行矩阵乘法,得到:
[ a x + b z a y + b w c x + d z c y + d w ] = [ 1 0 0 1 ] . \begin{bmatrix} ax + bz & ay + bw \\ cx + dz & cy + dw \end{bmatrix} =\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}. [ax+bzcx+dzay+bwcy+dw]=[1001].
6.3. 通过逐元素比较构造方程
从上面的等式中,我们得到以下4个方程:
-
第一行第一列:
a x + b z = 1. ax + bz = 1. ax+bz=1. -
第一行第二列:
a y + b w = 0. ay + bw = 0. ay+bw=0. -
第二行第一列:
c x + d z = 0. cx + dz = 0. cx+dz=0. -
第二行第二列:
c y + d w = 1. cy + dw = 1. cy+dw=1.
这些方程构成了一个线性方程组,接下来我们解这个方程组。
6.4. 解联立方程组
为了得到 x , y , z , w x, y, z, w x,y,z,w的值,我们可以按照以下步骤进行解算。
步骤 1:解第3个方程
从第3个方程:
c x + d z = 0 , cx + dz = 0, cx+dz=0,
解得:
z = − c d x . z = -\frac{c}{d}x. z=−dcx.
步骤 2:代入第1个方程
将 z = − c d x z = -\frac{c}{d}x z=−dcx代入第1个方程:
a x + b ( − c d x ) = 1 , ax + b\left(-\frac{c}{d}x\right) = 1, ax+b(−dcx)=1,
得到:
a x − b c d x = 1. ax - \frac{bc}{d}x = 1. ax−dbcx=1.
提取 x x x,得到:
x ( a − b c d ) = 1. x\left(a - \frac{bc}{d}\right) = 1. x(a−dbc)=1.
因此:
x = d a d − b c . x = \frac{d}{ad - bc}. x=ad−bcd.
步骤 3:解第4个方程
从第4个方程:
c y + d w = 1 , cy + dw = 1, cy+dw=1,
解得:
w = 1 − c y d . w = \frac{1 - cy}{d}. w=d1−cy.
步骤 4:代入第2个方程
将 w = 1 − c y d w = \frac{1 - cy}{d} w=d1−cy代入第2个方程:
a y + b ( 1 − c y d ) = 0 , ay + b\left(\frac{1 - cy}{d}\right) = 0, ay+b(d1−cy)=0,
得到:
a y + b ( 1 − c y ) d = 0 , ay + \frac{b(1 - cy)}{d} = 0, ay+db(1−cy)=0,
整理后:
a y + b d − b c d y = 0. ay + \frac{b}{d} - \frac{bc}{d}y = 0. ay+db−dbcy=0.
提取 y y y,得到:
y ( a − b c d ) = − b d . y\left(a - \frac{bc}{d}\right) = -\frac{b}{d}. y(a−dbc)=−db.
因此:
y = − b a d − b c . y = \frac{-b}{ad - bc}. y=ad−bc−b.
步骤 5:解 w w w
将 y = − b a d − b c y = \frac{-b}{ad - bc} y=ad−bc−b代入 w = 1 − c y d w = \frac{1 - cy}{d} w=d1−cy:
w = 1 − c ( − b a d − b c ) d = d a d − b c . w = \frac{1 - c\left(\frac{-b}{ad - bc}\right)}{d} = \frac{d}{ad - bc}. w=d1−c(ad−bc−b)=ad−bcd.
#3## 6.5. 最终结果
通过以上步骤,我们得到了 Φ − 1 \Phi^{-1} Φ−1的各个元素:
Φ − 1 = [ d a d − b c − b a d − b c − c a d − b c a a d − b c ] . \Phi^{-1} = \begin{bmatrix} \frac{d}{ad - bc} & \frac{-b}{ad - bc} \\ \frac{-c}{ad - bc} & \frac{a}{ad - bc} \end{bmatrix}. Φ−1=[ad−bcdad−bc−cad−bc−bad−bca].
利用逆矩阵的定义 Φ Φ − 1 = I \Phi \Phi^{-1} = I ΦΦ−1=I,我们通过构造并解联立方程组的方法成功求得了 2 × 2 2 \times 2 2×2矩阵的逆矩阵。该方法虽然手动推导较为繁琐,但对于理解逆矩阵的性质和计算过程具有重要的理论意义。
7. 比较总结
方法 | 特点 | 适用场景 |
---|---|---|
行列式公式法 | 直接计算,简单明了 | 小规模矩阵 |
伴随矩阵法 | 适用于符号化求解,但计算代数余子式较繁琐 | 手动推导或符号化运算 |
初等行变换法 | 理论基础强,操作灵活 | 理论学习与推导 |
数值计算法 | 效率高,适合大矩阵 | 工程计算与编程实现 |
符号化工具或函数 | 快捷简洁,依赖工具 | 实际工程问题求解 |
定义验证法 | 基础方法,计算量较大 | 理论验证与构造 |
相关文章:
矩阵求逆的几种方式
矩阵求逆的几种方式(以二阶为例) 矩阵求逆的方法有多种,以下是常用的几种方式总结: 1. 行列式公式法 这是最常见的方法,适用于 2 2 2 \times 2 22矩阵。 对于矩阵: Φ [ a b c d ] , \Phi \begin{bma…...
全新市场阶段, Plume 生态不断壮大的 RWAfi 版图
加密市场在 2024 年迎来了新的里程碑。BTC 不仅成功推出 ETF,以 BTC 为代表的主流加密货币还在一系列传统金融机构的推动下逐步与主流金融市场接轨。与此同时,随着特朗普成功当选下一任美国总统,他承诺推出一系列友好的加密政策,并…...
HTTPS SSL/TLS 工作流程
目录 一、HTTP/HTTPS 简介1、HTTP协议相关内容2、HTTPS协议3、HTTP版本差异: 二、HTTPS 协议工作流程解析1. 客户端请求 SSL 握手2. 服务端接收 SSL 握手连接3. TLS 握手中的密钥协商4. HTTP 数据的加密与解密5. 安全性保障 三、HTTPS 协议的相关知识拓展1. TLS 与 …...
基于异步IO的io_uring
基于异步IO的io_uring 1. io_uring的实现原理 io_uring使用了一种异步IO机制,它通过一对环形缓冲区(ring buffer)实现用户态于内核态之间的高效通信,用户只需将IO请求放入提交队列,当内核完成IO请求时,会将结果放入完成队列&…...
【redis】centos7下安装redis7
在CentOS 7下安装Redis7可以通过以下两种方法实现:手动编译安装和使用YUM进行安装。 CentOS 7系统的环境和版本: $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)手动编译安装 参考官方文档:https://redis.io/docs/lates…...
信息系统项目管理-采购管理-采购清单示例
序号类别产品/服务名称规格/功能描述数量备注1硬件服务器高性能处理器,大容量存储10HP、DELL2网络设备高速路由器和交换机10华为3工作站多核处理器,高分辨率显示器25国产设备4移动检查设备手持式移动检查仪,可连接云平台30国产设备5打印机和扫…...
python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能
import deepxde as dde import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 设置时空计算域 Lx 1 # x 范围从 0 到 1 Ly 1 # y 范围从 0 到 1 Lt 0.05 # t 范围从 0 到 0.05 geom dde.geometry.Rectangle([0, 0], [Lx, Ly]) # 空间域 timed…...
后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器? 总结 …...
继承(8)
大家好,今天我们来学习一下继承方式相关的知识,有助于我们对java的继承有更深的了解,话不多说,来看。 1.10 继承方式 在现实生活中,事物之间的关系是非常复杂,灵活多样。 Java中支持以下几种继承方式: 单继承: 多层…...
深度学习-图神经网络-超图概念及在Hyper-YOLO的应用(小白也看懂)
为什么需要超图? 在一个复杂系统中,某些节点(实体)之间的互动可能不是仅限于两个节点之间的关系,而是多个节点同时参与的更复杂的关系(超边)。简单说就是为了更好的描述事物之间的关系…...
django基于Python的校园个人闲置物品换购平台
Django 基于 Python 的校园个人闲置物品换购平台 一、平台概述 Django 基于 Python 的校园个人闲置物品换购平台是专为校园师生打造的一个便捷、环保且充满活力的线上交易场所。它借助 Django 这一强大的 Python Web 开发框架,整合了校园内丰富的闲置物品资源&…...
opencv的NLM去噪算法
NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是: 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找…...
嵌入式系统中的 OpenCV 与 OpenGLES 协同应用
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一、OpenCV 在嵌入式中的基石地位二、OpenGLES 为嵌入式图形渲染赋能三、二者协同的精妙之处四、面临的挑战与应对策略 在嵌入式开…...
第三十六章 Spring之假如让你来写MVC——拦截器篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
DDD - 如何运用 DDD 进行数据库设计
文章目录 Pre概述领域对象持久化的思想领域模型的设计传统的 4 种关系1. 一对一关系2. 多对一关系3. 一对多关系4. 多对多关系 继承关系的 3 种设计1. 继承关系的第一种方案:整个父类与子类都写入一张表2. 继承关系的第二种方案:各子类各自对应各自的表3…...
OSPF - 特殊报文与ospf的机制
👠1 携带FA地址的5类LSA 除去7类转5类的LSA会携带FA地址,还有一种情况会有FA地址 FA地址:forwarding address 转发地址,解决次优路径,避免环路5类LSA FA地址不为0,则直接通过FA地址去往目标网段 FA地址为0,…...
VSCode 插件
VSCode 插件 1. GitHub Copilot - AI 代码助手 功能:根据上下文提供实时代码补全,支持自然语言转代码,提供符合现代编程规范的建议。进阶技巧: 使用快捷键 Alt ] 切换多个建议。写注释时,描述业务逻辑而不是具体实现…...
jQuery CSS 类
jQuery CSS 类 引言 在网页设计和开发中,CSS(层叠样式表)起着至关重要的作用,它负责定义网页的布局、颜色、字体等视觉效果。jQuery,作为一个快速、小巧且功能丰富的JavaScript库,极大地简化了HTML文档的…...
CentOS下安装Docker
Docker 必须要在Linux环境下才能运行,windows下运行也是安装虚拟机后才能下载安装运行,菜鸟教程 下载安装 linux 依次执行下边步骤 更新 yum yum update 卸载旧的Docker yum remove docker docker-client docker-client-latest docker-common doc…...
SQLAlchemy
https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…...
2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
游泳竞技策略优化模型代码详解 第一题:速度优化模型 在这一部分,我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件: speed_optimization.py: 速度优化的核…...
深入架构剖析 博客点赞逻辑 strategy 策略模式 策略接口 上下文 具体策略 项目实战
目录 点赞策略上下文 策略上下文代码详解 1. 策略模式概述 2. 核心组件 3. 代码解读 LikeStrategyContext 类 LikeTypeEnum 枚举 LikeStrategy 接口 具体策略类 4. 如何使用这个设计 5. 优点 6. 总结 具体代码实现 定义枚举类 从控制层传入参数到上下文 在策略上…...
嵌入式Linux之C语言开发基础
一、C 语言编译过程 Linux 的 C 语言开发,一般选择 GCC 工具链进行编译,示例: 1.mkdir helloworld 2.cd helloworld // 1.main.c #include "hello.h" int main() {say_hello();return 0; } // 2.hello.h #ifndef __HELLO_H__ #de…...
std::accumulate
std::accumulate 是 C 标准库中的一个算法,定义在 <numeric> 头文件中。它用于计算给定范围内元素的累积值(通常是一个和,但也可以是其他类型的累积操作)。 template< class InputIt, class T > T accumulate( Input…...
计算机网络 (33)传输控制协议TCP概述
一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同&…...
Gitee图形界面上传(详细步骤)
目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe,顺序不能搞错2. …...
【STM32-学习笔记-6-】DMA
文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...
苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)
营业额统计 service层 在需要处理空值、与数据库交互或使用集合时,Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…...
Node.js——fs(文件系统)模块
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
【Docker】入门教程
目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …...
Ubuntu中使用miniconda安装R和R包devtools
安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…...
大语言模型预训练、微调、RLHF
转发,如有侵权,请联系删除: 1.【LLM】3:从零开始训练大语言模型(预训练、微调、RLHF) 2.老婆饼里没有老婆,RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…...
啥!GitHub Copilot也免费使用了
文章目录 前言免费版直接修复代码多文件上下文Agent模式总结 前言 最近,GitHub 给开发者们带来了一个好消息:他们的 AI 编程助手 GitHub Copilot 现在可以免费使用了!以前,每个月要花 10 美元才能享受的服务,现在对所…...
【Ubuntu与Linux操作系统:五、文件与目录管理】
第5章 磁盘存储管理 5.1 Linux磁盘存储概述 磁盘存储是Linux系统存储数据的重要组件,它通过分区和文件系统组织和管理数据。Linux支持多种文件系统,如ext4、xfs和btrfs,并以块的形式管理存储设备。 1. 分区与文件系统: 分区&am…...
【PDF转Word】 PDF在线转word文档 好用!优质网站资源推荐
大家在工作与学习中,经常需要将PDF文件转换为Word格式以便进行编辑和修改。很多人都不知道怎么操作,今天我们介绍一个非常好用的工具:小白工具网,可以在线帮忙大家快速把PDF转换成word格式。 小白工具网提供的PDF转Word功能&…...
计算机网络 (38)TCP的拥塞控制
前言 TCP拥塞控制是传输控制协议(Transmission Control Protocol,TCP)避免网络拥塞的算法,是互联网上主要的一个拥塞控制措施。 一、目的 TCP拥塞控制的主要目的是防止过多的数据注入到网络中,使网络能够承受现有的网络…...
构造函数的原型原型链
代码示例 // 定义一个构造函数 Test function Test() {this.name 张三 }; //向构造函数的原型添加一个属性 age18 Test.prototype.age 18;//使用构造函数 Test 来实例化一个新对象 const test new Test();//向 Object.prototype 添加了一个名为 sex 的属性,其值…...
2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)
大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…...
[RabbitMQ] RabbitMQ运维问题
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
GenAIOps:生成式 AI 运维 - 实用指南
https://medium.com/google-cloud/genaiops-operationalize-generative-ai-a-practical-guide-d5bedaa59d78 作者:Dr Sokratis Kartakis 从创意到生产:使用生成式 AI 和运维 (GenAIOps) 概述 生成式 AI (GenAI) 的世界充满了令人兴奋的可…...
用户界面软件04
后果 使用这种架构很容易对两个层面的非功能性需求进行优化,但是你仍然需要小心不要将功能 需求重复实现。 现在,两个层面可能有完全不同的设计。比如,用户界面层可能使用配件模型(Widget Model), 以大量的…...
分布式系统设计:Java的秘密基地布局
分布式系统设计是Java企业级开发中的一个关键领域,它涉及到构建高可用、可扩展、高性能的系统。以下是分布式系统设计的一些核心概念和实践: 3.1 分布式系统的特点 分布式系统由多个独立的计算机节点组成,这些节点通过网络连接在一起&#x…...
【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿
文章目录 完成任务1. 什么是缓存2. 添加商户缓存3. 缓存更新策略3.1 主动更新 4. 缓存穿透5. 缓存雪崩6. 缓存击穿6.1 使用互斥锁查询商铺信息6.2 使用逻辑过期查询商铺信息 7. 封装 Redis 工具类 完成任务 1. 什么是缓存 缓存:数据交换的缓冲区(Cache…...
MySQL索引覆盖(覆盖索引, Covering Index)
文章目录 说明MySQL索引覆盖(覆盖索引, Covering Index)覆盖索引的概念覆盖索引的示例示例查询及索引覆盖情况覆盖索引的性能优势覆盖索引的实现条件覆盖索引 vs 非覆盖索引覆盖索引的限制如何设计覆盖索引覆盖索引的实际案例场景 1:电商系统…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
【UE5 C++课程系列笔记】29——在UE中使用第三方库的流程
目录 前言 步骤 一、新建插件 二、创建第三方库 三、使用第三方库 前言 主要就是介绍如何将普通C++工程生成的头文件和.dll导入到UE中去使用。 步骤 一、新建插件 1. 打开插件浏览器选项卡 2. 打开插件创建器 3. 选择“第三方库”,这里命名为“MyThirdPartyLibrary…...
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
20250112面试鸭特训营第20天
更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别? 特性TCPUDP连接方式面向连接(需要建立连接)无连接(无需建立连接)可靠性可靠的,提供确认、重传机制不可靠,…...
使用conda出现requests.exceptions.HTTPError 解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
玩转大语言模型——langchain调用ollama视觉多模态语言模型
系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…...