线性代数的本质(三)——线性方程组

文章目录

  • 线性方程组
    • 高斯消元法
    • 初等行变换
    • 线性方程组的解
    • 向量方程
    • 齐次线性方程组的解
    • 非齐次线性方程组的解

线性方程组

高斯消元法

客观世界最简单的数量关系是均匀变化的关系。在均匀变化问题中,列出的方程组是一次方程组,我们称之为线性方程组(Linear system of equations)。 n n n元线性方程组的一般形式为
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m \begin{cases} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1 \\ a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2 \\ \cdots\quad\cdots \\ a_{m1}x_1+a_{m2}x_2+\cdots+a_{mn}x_n=b_m \end{cases} a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2am1x1+am2x2++amnxn=bm
如果存在 n n n个常数 x 1 = s 1 , x 2 = s 2 , ⋯ , x n = s n x_1=s_1,x_2=s_2,\cdots,x_n=s_n x1=s1,x2=s2,,xn=sn 满足线性方程组的所有方程,则称为线性方程组的一个(solution)。方程组的所有解组成的集合称为这个方程组的解集

解线性方程组的一般方法,是把方程组用一个更容易解的等价方程组 (即有相同解集的方程组)代替。用来化简线性方程组的三种基本变换是:

(1) 互换两个方程的位置;
(2) 把某一个方程的所有项乘以一个非零常数;
(3) 把某一个方程加上另一个方程的常数倍;

以上三种变换称为高斯消元法(Gaussian Elimination)。

例如,解方程组
{ 2 x 2 − x 3 = 7 x 1 + x 2 + 2 x 3 = 0 x 1 + x 2 − x 3 = − 6 x 1 + 3 x 2 − 2 x 3 = 1 \begin{cases} \begin{alignedat}{4} &\quad 2x_2&-\ \ x_3 &= 7 \\ x_1&+\ x_2&+2x_3& = 0 \\ x_1&+\ x_2&-\ \ x_3& = -6 \\ x_1&+3x_2&-2x_3&=1 \end{alignedat} \end{cases} x1x1x12x2+ x2+ x2+3x2  x3+2x3  x32x3=7=0=6=1
经过基本变换把线性方程组化成阶梯形方程组
{ x 1 + x 2 − x 3 = − 6 2 x 2 − x 3 = 7 3 x 3 = 6 0 = 0 \begin{cases} \begin{alignedat}{4} x_1&+x_2&-x_3& = -6 \\ &\quad 2x_2&-x_3 &= 7 \\ &\quad &\quad 3x_3& = 6 \\ &\quad &\quad 0& = 0 \end{alignedat} \end{cases} x1+x22x2x3x33x30=6=7=6=0
还可以进一步变换为简化阶梯形方程组
{ x 1 = − 9 x 2 = 5 x 3 = 2 0 = 0 \begin{cases} x_1 & & &=-9 \\ & x_2 & & = 5 \\ & & x_3& = 2 \\ & & 0& = 0 \end{cases} x1x2x30=9=5=2=0
上面的简单例子代表了用消元法解线性方程组的一般方法和计算格式。

初等行变换

根据矩阵与向量的乘法定义,线性方程组可写为矩阵形式
A x = b A\mathbf x=\mathbf b Ax=b
其中
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] , x = [ x 1 x 2 ⋮ x n ] , b = [ b 1 b 2 ⋮ b n ] A=\begin{bmatrix} a_{11}&a_{12}&\cdots&a_{1n} \\ a_{21}&a_{22}&\cdots&a_{2n} \\ \vdots&\vdots&\ddots&\vdots \\ a_{m1}&a_{m2}&\cdots&a_{mn} \\ \end{bmatrix},\quad \mathbf x=\begin{bmatrix} x_1\\x_2\\\vdots\\x_n \end{bmatrix},\quad \mathbf b=\begin{bmatrix} b_1\\b_2\\\vdots\\b_n \end{bmatrix} A= a11a21am1a12a22am2a1na2namn ,x= x1x2xn ,b= b1b2bn
矩阵 A A A 称为系数矩阵 x \mathbf x x未知数向量 b \mathbf b b常数向量

从上节求解线性方程组的过程中,不难发现,只是对线性方程组的系数和常数项进行了运算。因此,线性方程组可以用它的系数和常数项来求解。

为求解方便,把常数向量添加到系数矩阵最后一列,构成的矩阵
A ˉ = [ A ∣ b ] = [ a 11 ⋯ a 1 n b 1 a 21 ⋯ a 2 n b 2 ⋮ ⋮ ⋱ ⋮ a m 1 ⋯ a m n b m ] \bar A=[A\mid b]=\begin{bmatrix}\begin{array}{ccc:c} a_{11}&\cdots&a_{1n}&b_1 \\ a_{21}&\cdots&a_{2n}&b_2 \\ \vdots&\vdots&\ddots&\vdots \\ a_{m1}&\cdots&a_{mn}&b_m \\ \end{array}\end{bmatrix} Aˉ=[Ab]= a11a21am1a1na2namnb1b2bm
称为方程组的增广矩阵(augmented matrix)。

初等行变换:上节所讲的三种基本变换对应于矩阵的下列变换:

(1) 行互换变换:对调矩阵的第 i i i行和第 j j j行 ,记为 r i ↔ r j r_i\lrarr r_j rirj
(2) 行倍乘变换:矩阵的第 i i i行乘以非零常数 k k k,记为 k r i kr_i kri
(3) 行倍加变换:将第 j j j行的元素倍加到第 i i i行,记作 r i + k r j r_i+kr_j ri+krj

称为矩阵的初等行变换(elementary row transformation)。

矩阵消元法:在解线性方程组时,把它的增广矩阵经过初等行变换化成行阶梯形矩阵,写出相应的阶梯形方程组 ,进行求解;或者一直化成简化行阶梯形矩阵,写出它表示的简化阶梯形方程组,从而立即得出解。

上节例子中,增广矩阵经过初等行变换可简化为
A ˉ = [ 0 2 − 1 7 1 1 2 0 1 1 − 1 − 6 1 3 − 2 1 ] → [ 1 1 − 1 − 6 0 2 − 1 7 0 0 3 6 0 0 0 0 ] = B 1 \bar A=\begin{bmatrix}\begin{array}{ccc:c} 0 & 2 & -1 & 7 \\ 1 & 1 & 2 & 0\\ 1 & 1 & -1 & -6 \\ 1 & 3 & -2 & 1 \end{array}\end{bmatrix}\to \begin{bmatrix}\begin{array}{ccc:c} 1 & 1 & -1 & -6 \\ 0 & 2 & -1 & 7\\ 0 & 0 & 3 & 6 \\ 0 & 0 & 0 & 0 \end{array}\end{bmatrix}=B_1 Aˉ= 0111211312127061 1000120011306760 =B1
称形如 B 1 B_1 B1 的矩阵为行阶梯形矩阵(Row Echelon Form,REF)。其特点是:

(1) 若有零行(元素全为零的行),零行均在非零行的下方;
(2) 非零行第一个非零元素(称为主元,pivot)以下的元素全为零。

使用初等行变换对行阶梯形矩阵进一步化简
B 1 = [ 1 1 − 1 − 6 0 2 − 1 7 0 0 3 6 0 0 0 0 ] → [ 1 0 0 − 9 0 1 0 5 0 0 1 2 0 0 0 0 ] = B 2 B_1=\begin{bmatrix}\begin{array}{ccc:c} 1 & 1 & -1 & -6 \\ 0 & 2 & -1 & 7\\ 0 & 0 & 3 & 6 \\ 0 & 0 & 0 & 0 \end{array}\end{bmatrix}\to\begin{bmatrix}\begin{array}{ccc:c} 1 & 0 & 0 & -9 \\ 0 & 1 & 0 & 5\\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 0 \end{array}\end{bmatrix}=B_2 B1= 1000120011306760 1000010000109520 =B2
称形如 B 2 B_2 B2 的矩阵为简化行阶梯形矩阵(Reduced Row Echelon Form,RREF)。其特点是:

(1) 每个非零行主元都是1;
(2) 主元所在列的其他元素都是零。

通过简化行阶梯形矩阵,我们可以直接写出解 x 1 = − 9 , x 2 = 5 , x 3 = 2 x_1=-9,x_2=5,x_3=2 x1=9,x2=5,x3=2

使用矩阵消元法,我们可以知道任何矩阵都可以经过有限次初等行变换化成行阶梯形矩阵,任何矩阵也可进一步化成简化行阶梯形矩阵

从最后的简化行阶梯形矩阵可以直接写出一般解,但注意把自由变量的系数变号移到等式右边。

线性方程组的解

假设某方程组的增广矩阵行已变换为阶梯形矩阵
[ 1 0 − 5 1 0 1 1 4 0 0 0 0 ] \begin{bmatrix}\begin{array}{ccc:c} 1 & 0 & -5 & 1 \\ 0 & 1 & 1 & 4\\ 0 & 0 & 0 & 0 \end{array}\end{bmatrix} 100010510140
对应的线性方程组是
{ x 1 − 5 x 3 = 1 x 2 + x 3 = 4 0 = 0 \begin{cases} \begin{alignedat}{4} x_1&&-5x_3& = 1 \\ &\quad\ x_2&+x_3 &= 4 \\ &\quad &\quad 0& =0 \end{alignedat} \end{cases} x1 x25x3+x30=1=4=0
方程组的解可显示表示为 x 1 = 1 + 5 x 3 , x 2 = 4 − x 3 x_1=1+5x_3,\ x_2=4-x_3 x1=1+5x3, x2=4x3 ,显然有无穷多组解。

n n n 元线性方程组的增广矩阵化成行阶梯形矩阵后,若有 r r r 个非零行,则行阶梯形矩阵有 r r r 个主元。以主元为系数的末知量称为主变量,剩下的 n − r n-r nr 个未知量称为自由变量,其值可任取。

假设某方程组的增广矩阵行已变换为阶梯形矩阵
[ 2 − 3 2 1 0 1 − 4 8 0 0 0 15 ] \begin{bmatrix}\begin{array}{ccc:c} 2 & -3 & 2 & 1 \\ 0 & 1 & -4 & 8\\ 0 & 0 & 0 & 15 \end{array}\end{bmatrix} 2003102401815
对应的线性方程组是
{ 2 x 1 − 3 x 2 + 2 x 3 = 1 x 2 − 4 x 3 = 8 0 = 15 \begin{cases} \begin{alignedat}{4} 2x_1&-3x_2&+2x_3& = 1 \\ &\quad\ x_2&-4x_3 &= 8 \\ &\quad &\quad 0& = 15 \end{alignedat} \end{cases} 2x13x2 x2+2x34x30=1=8=15
这个阶梯形方程组显然是矛盾的,故原方程组无解。

解的情况:线性方程组有解的充要条件是增广矩阵的增广列不是主元列,即行阶梯形方程组不包含矛盾方程。若线性方程组有解,则解有两种情况:(1) 当没有自由变量时,有唯 一解;(2) 当有自由变量是,有无穷多解。

向量方程

应用向量加法和数乘运算,线性方程组 A x = b A\mathbf x=\mathbf b Ax=b 可以写成向量方程
x 1 a 1 + x 2 a 2 + ⋯ + x n a n = b x_1\mathbf a_1+x_2\mathbf a_2+\cdots+x_n\mathbf a_n=\mathbf b x1a1+x2a2++xnan=b
其中 a 1 , a 2 , ⋯ , a n \mathbf a_1,\mathbf a_2,\cdots,\mathbf a_n a1,a2,,an 为系数矩阵 A A A 的列向量组, b \mathbf b b 为常数向量。它的一组解 s = ( x 1 , x 2 , ⋯ , x n ) T s=(x_1,x_2,\cdots,x_n)^T s=(x1,x2,,xn)T 称为方程组的解向量

例如,方程组
{ 2 x 1 − x 2 + x 3 = 4 4 x 1 + 2 x 2 − x 3 = − 1 \begin{cases} \begin{alignedat}{4} 2x_1&-x_2&+x_3& = 4 \\ 4x_1&+2x_2&-x_3& = -1 \end{alignedat} \end{cases} {2x14x1x2+2x2+x3x3=4=1
可以表述为
[ 2 4 ] x 1 + [ − 1 2 ] x 2 + [ 1 − 1 ] x 3 = [ 4 − 1 ] \begin{bmatrix}2\\4\end{bmatrix}x_1+ \begin{bmatrix}-1\\2\end{bmatrix}x_2+ \begin{bmatrix}1\\-1\end{bmatrix}x_3= \begin{bmatrix}4\\-1\end{bmatrix} [24]x1+[12]x2+[11]x3=[41]
既然可表示为向量的形式,那么就可以从向量的角度分析。向量方程是否有解的问题等价于判断常数向量 b \mathbf b b 能否由系数矩阵列向量组线性表示,即向量 b \mathbf b b 是否属于系数矩阵的列空间 col  A = span { a 1 , a 2 , ⋯ , a n } \text{col }A=\text{span}\{\mathbf a_1,\mathbf a_2,\cdots,\mathbf a_n\} col A=span{a1,a2,,an}

结论:方程 A x = b A\mathbf x=\mathbf b Ax=b有解的充要条件是 b \mathbf b b A A A 的各列的线性组合。

以线性变换的角度理解,希望找出未知向量 x \mathbf x x ,使得该向量在线性变换 A A A 的作用下变成已知向量 b \mathbf b b。因此,我们可以从逆变换的角度获得未知向量。显然,如果变换后维度压缩,方程不一定有解。即列空间的维度低于未知向量维度。

齐次线性方程组的解

常数项都为零的线性方程组 A x = 0 A\mathbf{x}=0 Ax=0 称为齐次线性方程组。向量方程为
x 1 a 1 + x 2 a 2 + ⋯ + x n a n = 0 x_1\mathbf a_1+x_2\mathbf a_2+\cdots+x_n\mathbf a_n=0 x1a1+x2a2++xnan=0

齐次线性方程组显然有一组解
x 1 = x 2 = ⋯ = x n = 0 x_1=x_2=\cdots=x_n=0 x1=x2==xn=0
这组解称为零解平凡解。除此之外的其他解称为非零解非平凡解

方程 A m × n x = 0 A_{m\times n}\mathbf{x}=0 Am×nx=0 有非零解等价于 A A A 的列向量组线性相关,即 rank ( A ) < n \text{rank}(A)<n rank(A)<n

齐次线性方程组的解有如下性质

  1. 如果 s 1 , s 2 s_1,s_2 s1,s2 是齐次线性方程组的两个解向量,则 s 1 + s 2 s_1+s_2 s1+s2 也是方程组的解向量。
  2. 如果 s s s 是齐次线性方程组的解向量,则对任意常数 k k k k s ks ks 也是方程组的解向量。

这两条性质只要直接代入向量方程进行验证就可以。

显然,系数矩阵为 A A A 的齐次线性方程组的解集
ker ⁡ A = { x ∣ A x = 0 } \ker A=\{\mathbf x|A\mathbf{x}=0\} kerA={xAx=0}
满足向量空间的条件, 称为零空间(nullspace)或(kernel)。解空间的一组基 s 1 , s 2 , ⋯ , s n − r s_1,s_2,\cdots,s_{n-r} s1,s2,,snr 称为该方程组的基础解系零空间的维数即为自由变量的个数

如果能找到基础解系,就能描述整个解空间。

定理

  1. 方程 A m × n x = 0 A_{m\times n}\mathbf{x}=0 Am×nx=0 有非零解的充要条件是 rank ( A ) < n \text{rank}(A)<n rank(A)<n
  2. 方程 A m × n x = 0 A_{m\times n}\mathbf{x}=0 Am×nx=0 基础解系中自由变量的个数等于 n − rank ( A ) n-\text{rank}(A) nrank(A)
  3. A A A 是向量空间 V V V 内的线性变换

dim ⁡ V = dim ⁡ ( range  A ) + dim ⁡ ( ker ⁡ A ) \dim V=\dim(\text{range }A)+\dim(\ker A) dimV=dim(range A)+dim(kerA)

可以用系数矩阵的初等行变换来求基础解系。

示例:求下列齐次线性方程组的解集。
{ x 2 − x 3 + x 4 − x 5 = 0 x 1 + x 3 + 2 x 4 − x 5 = 0 x 1 + x 2 + 3 x 4 − 2 x 5 = 0 2 x 1 + 2 x 2 + 6 x 4 − 3 x 5 = 0 \begin{cases} x_2-x_3+x_4-x_5=0 \\ x_1+x_3+2x_4-x_5=0 \\ x_1+x_2+3x_4-2x_5=0 \\ 2x_1+2x_2+6x_4-3x_5=0 \end{cases} x2x3+x4x5=0x1+x3+2x4x5=0x1+x2+3x42x5=02x1+2x2+6x43x5=0
解:先做矩阵消元法获得阶梯形矩阵和简化阶梯形矩阵
A = [ 0 1 − 1 1 − 1 1 0 1 2 − 1 1 1 0 3 − 2 2 2 0 6 − 3 ] → [ 1 0 1 2 − 1 0 1 − 1 1 − 1 0 0 0 0 1 0 0 0 0 0 ] → [ 1 0 1 2 0 0 1 − 1 1 0 0 0 0 0 1 0 0 0 0 0 ] A=\begin{bmatrix} 0&1&-1&1&-1 \\ 1&0&1&2&-1 \\ 1&1&0&3&-2 \\ 2&2&0&6&-3 \end{bmatrix}\to \begin{bmatrix} 1&0&1&2&-1 \\ 0&1&-1&1&-1 \\ 0&0&0&0&1 \\ 0&0&0&0&0 \end{bmatrix}\to \begin{bmatrix} 1&0&1&2&0 \\ 0&1&-1&1&0 \\ 0&0&0&0&1 \\ 0&0&0&0&0 \end{bmatrix} A= 01121012110012361123 10000100110021001110 10000100110021000010
因此
{ x 1 = − x 3 − 2 x 4 x 2 = x 3 − x 4 x 5 = 0 \begin{cases} x_1=-x_3-2x_4 \\ x_2=x_3-x_4 \\ x_5=0 \end{cases} x1=x32x4x2=x3x4x5=0
可写为解向量的形式
[ x 1 x 2 x 3 x 4 x 5 ] = x 3 [ − 1 1 1 0 0 ] + x 4 [ − 2 − 1 0 1 0 ] \begin{bmatrix}x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5\end{bmatrix}= x_3\begin{bmatrix}-1 \\ 1 \\ 1 \\ 0 \\ 0\end{bmatrix} +x_4\begin{bmatrix}-2\\-1\\0\\1\\0\end{bmatrix} x1x2x3x4x5 =x3 11100 +x4 21010

非齐次线性方程组的解

对于非齐次线性方程组 A x = 0 A\mathbf{x}=0 Ax=0 。判断向量方程 x 1 a 1 + x 2 a 2 + ⋯ + x n a n = b x_1\mathbf a_1+x_2\mathbf a_2+\cdots+x_n\mathbf a_n=\mathbf b x1a1+x2a2++xnan=b 是否有解,等价于判断常数向量 b \mathbf b b 是否属于 span { a 1 , a 2 , ⋯ , a n } \text{span}\{\mathbf a_1,\mathbf a_2,\cdots,\mathbf a_n\} span{a1,a2,,an}

判别定理:线性方程组有解的充要条件是其系数矩阵 A A A与增广矩阵 A ˉ \bar A Aˉ的秩相等 rank ( A ) = rank ( A ˉ ) \text{rank}(A)=\text{rank}(\bar A) rank(A)=rank(Aˉ)

通俗理解就是,变换后的阶梯形方程组不存在 0 = b 0=b 0=b 的矛盾方程。

解的结构:设 n n n 元非齐次线性方程组 rank ( A ) = rank ( A ˉ ) \text{rank}(A)=\text{rank}(\bar A) rank(A)=rank(Aˉ)

(1) 若 rank ( A ) = n \text{rank}(A)=n rank(A)=n,方程组有唯一解;
(2) 若 rank ( A ) < n \text{rank}(A)<n rank(A)<n,方程组有无穷多解。

非齐次线性方程组 A x = b A\mathbf x=\mathbf b Ax=b 对应的齐次线性方程组 A x = 0 A\mathbf x=0 Ax=0 称为导出方程组。解的关系:

  1. A x = b A\mathbf x=\mathbf b Ax=b 的任意两个解向量之差是 A x = 0 A\mathbf x=0 Ax=0 的一个解向量;
  2. A x = b A\mathbf x=\mathbf b Ax=b 的通解是其任一解向量与 A x = b A\mathbf x=\mathbf b Ax=b 通解之和。

如下图

请添加图片描述

示例:求下列线性方程组的全部解

{ x 1 + 4 x 2 − 5 x 3 = 0 2 x 1 − x 2 + 8 x 3 = 9 \begin{cases} \begin{alignedat}{4} x_1&+4x_2&-5x_3& = 0 \\ 2x_1&-x_2&+8x_3& = 9 \end{alignedat} \end{cases} {x12x1+4x2x25x3+8x3=0=9
解:对方程组的增广矩阵做初等行变换获得阶梯形矩阵和简化阶梯形矩阵
A ˉ = [ 1 4 − 5 0 2 − 1 8 9 ] → [ 1 4 − 5 0 0 − 9 18 9 ] → [ 1 0 3 4 0 1 − 2 1 ] \bar A=\begin{bmatrix}\begin{array}{ccc:c} 1&4&-5&0 \\ 2&-1&8&9 \end{array}\end{bmatrix}\to \begin{bmatrix}\begin{array}{ccc:c} 1&4&-5&0 \\ 0&-9&18&9 \end{array}\end{bmatrix}\to \begin{bmatrix}\begin{array}{ccc:c} 1&0&3&4 \\ 0&1&-2&1 \end{array}\end{bmatrix} Aˉ=[12415809][104951809][10013241]
因此
{ x 1 = 4 − 3 x 3 x 2 = 1 + 2 x 3 \begin{cases} x_1=4-3x_3 \\ x_2=1+2x_3 \end{cases} {x1=43x3x2=1+2x3
解向量的形式为
[ x 1 x 2 x 3 ] = [ 4 1 0 ] + x 3 [ − 3 2 1 ] \begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}= \begin{bmatrix}4\\1\\0\end{bmatrix} +x_3\begin{bmatrix}-3 \\ 2 \\ 1 \end{bmatrix} x1x2x3 = 410 +x3 321

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135749.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【去除若依首页】有些小项目不需要首页,去除方法

第一步 // // // // // // // // // // // // // // // // // // 修改登录页 Login.vue 中 大概144行 &#xff0c;注释掉原有跳转。替换为自己的跳转路径 // // // // // // // // // // // // // this.$router.push({ path: this.redirect || …

Observability:使用 OpenTelemetry 手动检测 Go 应用程序

作者&#xff1a;Luca Wintergerst DevOps 和 SRE 团队正在改变软件开发的流程。 DevOps 工程师专注于高效的软件应用程序和服务交付&#xff0c;而 SRE 团队是确保可靠性、可扩展性和性能的关键。 这些团队必须依赖全栈可观察性解决方案&#xff0c;使他们能够管理和监控系统&…

系统IO和标准IO

一.系统IO 系统 I/O&#xff08;Input/Output&#xff09;是计算机操作系统提供给应用程序的一种输入和输出方式。它通过系统调用&#xff08;系统内核提供的函数&#xff09;来实现数据的读取和写入。系统 I/O 可以用于与文件、设备&#xff08;例如磁盘驱动器、网络接口、串…

使用vite创建vue3项目及项目的配置 | 环境准备 ESLint配置 prettier配置 husky配置 项目继承

文章目录 使用vite创建vue3项目及项目的配置1.环境准备2.项目配置ESLint校验代码工具配置 - js代码检测工具1.安装ESLint到开发环境 devDependencies2.生成配置文件:.eslint.cjs**3.安装vue3环境代码校验插件**4. 修改.eslintrc.cjs配置文件5.生成ESLint忽略文件6.在package.js…

[BJDCTF2020]Mark loves cat foreach导致变量覆盖

这里我们着重了解一下变量覆盖 首先我们要知道函数是什么 foreach foreach (iterable_expression as $value)statement foreach (iterable_expression as $key > $value)statement第一种格式遍历给定的 iterable_expression 迭代器。每次循环中&#xff0c;当前单元的值被…

使用 Nginx 实现企业微信域名配置中的校验文件跳转

背景 在企业微信中配置业务域名时&#xff0c;通常需要在该域名的根路径下放置一个校验文件&#xff0c;以验证域名的所有权。然而&#xff0c;如果该域名是第三方的&#xff0c;你可能无法直接在根路径下放置文件。在这种情况下&#xff0c;你可以使用 Nginx 来实现校验文件的…

OPC DCOM快速配置

目录 1 老系统配置 1.1 移除Windows 安全 1.2 建立相互能识别的用户账号 1.3 配置系统宽泛的DCOM设置 1.4 配置Server的特殊DCOM设置 1.5 恢复Windows安全 1 老系统配置 远程OPC访问必须在服务器和客户端两端配置DCOM。本文讲述如何正确配置 DCOM 的步骤并保证安全。 新…

Git(6)——GitHub

目录 一、简介 二、概要 三、注册 ​四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git&#xff08;5&#xff09;中&#xff0c;我们已经对Git分支的概念和用法有了一定了解&#xff0c;对于在本地进行代码版本管理&#xff0c;其实当前所学的东西基本已经…

CocosCreator3.8研究笔记(十八)CocosCreator UI组件(二)

前面的文章已经介绍了Canvas 组件、UITransform 组件、Widget 组件 。 想了解的朋友&#xff0c;请查看 CocosCreator3.8研究笔记&#xff08;十七&#xff09;CocosCreator UI组件&#xff08;一&#xff09;。 今天我们主要介绍CocosCreator 常用容器组件&#xff1a;Layout …

【深度学习实验】线性模型(四):使用Pytorch实现线性模型:使用随机梯度下降优化器训练模型

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 线性模型linear_model 2. 损失函数loss_function 3. 定义数据 4. 初始化权重和偏置 5. 模型训练 6. 迭代 7. 实验结果 8. 完整代码 一、实验介绍 使用随机梯度下降优化…

解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose

参考&#xff1a;Docker官网-Install Docker Engine on Ubuntu 一、 Install using the Apt repository 1.1 Set up Docker’s Apt repository 1.1.1 Add Docker’s official GPG key # Add Dockers official GPG key: sudo apt-get updatesudo apt-get install ca-certifi…

Java文字描边效果实现

效果&#xff1a; FontUtil工具类的完整代码如下&#xff1a; 其中实现描边效果的函数为&#xff1a;generateAdaptiveStrokeFontImage() package com.ncarzone.data.contentcenter.biz.img.util;import org.springframework.core.io.ClassPathResource; import org.springfr…

ApplicationContext版本的快速入门

ApplicationContext快速入门 ApplicationContext称为Spring容器&#xff0c;内部封装了BeanFactory&#xff0c;比BeanFactory功能更加丰富和强大&#xff0c;使用ApplicationContext进行开发时&#xff0c;xml配置文件的名称习惯写成applicationContext.xml。 BeanFactory和…

Python语言学习实战-内置函数sorted()的使用(附源码和实现效果)

实现功能 sorted()函数是Python的内置函数之一&#xff0c;用于对可迭代对象进行排序操作。它可以对列表、元组、字符串等可迭代对象进行排序&#xff0c;并返回一个新的已排序的列表。 sorted()函数的语法如下&#xff1a; sorted(iterable, keyNone, reverseFalse)其中&am…

6-2 pytorch中训练模型的3种方法

Pytorch通常需要用户编写自定义训练循环&#xff0c;训练循环的代码风格因人而异。&#xff08;养成自己的习惯&#xff09; 有3类典型的训练循环代码风格&#xff1a;脚本形式训练循环&#xff0c;函数形式训练循环&#xff0c;类形式训练循环。 下面以minist数据集的多分类模…

ROS 入门

目录 简介 ROS诞生背景 ROS的设计目标 ROS与ROS2 安装ROS 1.配置ubuntu的软件和更新 2.设置安装源 3.设置key 4.安装 5.配置环境变量 安装可能出现的问题 安装构建依赖 卸载 ROS架构 1.设计者 2.维护者 3. 立足系统架构: ROS 可以划分为三层 ROS通信机制 话…

【窗体】Winform两个窗体之间通过委托事件进行值传递,基础篇

2023年&#xff0c;第38周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 在实际项目中&#xff0c;我们可能会用到一些窗体做一些小工具或者小功能。比如&#xff1a;运行程序&#xff0c;在主窗体A基础上&#xff0c;点击某个按钮希望能…

移动设备管理(MDM):密码管理

密码是企业设备的第一道防线&#xff0c;它们通过限制锁屏之外的未经授权访问来确保设备中包含的敏感数据的安全性和机密性。对于组织&#xff0c;强烈建议遵循复杂的密码策略&#xff0c;因为简单和通用的密码使入侵者能够毫不费力地访问敏感的企业数据。密码越简单&#xff0…

ElasticSearch 5.6.3 自定义封装API接口

在实际业务中&#xff0c;查询 elasticsearch 时会遇到很多特殊查询&#xff0c;官方接口包有时不便利&#xff0c;特殊情况需要自定义接口&#xff0c;所以为了灵活使用、维护更新 编写了一套API接口&#xff0c;仅供学习使用 当前自定义API接口依赖 elasticsearch 5.6.3 版本…

l8-d21 域名解析与http服务器实现原理

一、域名解析gethostbyname函数 主机结构在 <netdb.h> 中定义如下&#xff1a; struct hostent { char *h_name; /* 官方域名 */ char **h_aliases; /* 别名*/ int h_addrtype; /* 地址族&#xff08;地址类型&#xff09; */ int h_l…