首页 > 其他分享 >高等代数精解【10】

高等代数精解【10】

时间:2024-09-03 11:22:48浏览次数:14  
标签:10 代数 end 增广 线性方程组 矩阵 12 pmatrix 精解

文章目录

线性方程组

概述

  • 线性方程组是由一个或多个线性方程组成的集合,其中每个方程都是未知数的线性组合。具体来说,一个线性方程可以表示为:
    a 1 x 1 + a 2 x 2 + ⋯ + a n x n = b a_1x_1 + a_2x_2 + \cdots + a_nx_n = b a1​x1​+a2​x2​+⋯+an​xn​=b
    其中, a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 和 b b b 是常数, x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1​,x2​,…,xn​ 是未知数。

  • 系数矩阵是一个线性方程组中所有方程的系数构成的矩阵。对于方程组:
    { 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 \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n = b_m \end{cases} ⎩ ⎧​a11​x1​+a12​x2​+⋯+a1n​xn​=b1​a21​x1​+a22​x2​+⋯+a2n​xn​=b2​⋮am1​x1​+am2​x2​+⋯+amn​xn​=bm​​
    其系数矩阵为:
    ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ) \begin{pmatrix} 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{pmatrix} ​a11​a21​⋮am1​​a12​a22​⋮am2​​⋯⋯⋱⋯​a1n​a2n​⋮amn​​

  • 方程组可表示为 1. a 1 x 1 + . . . . + a n x n = b b = [ b 1 b 2 . . . b m ] , a j = [ a 1 j a 2 j . . . a m j ] 2. A x = b 系数矩阵 A 表示为 : [ a 1 , a 2 , . . . , a n ] ,其中 a 1 , . . , a n 是系数矩阵的列向量 未知数向量为 : x = [ x 1 x 2 . . . x n ] 方程组可表示为 \\1.a_1x_1+....+a_nx_n=b \\b=\begin{bmatrix} b_1\\ b_2\\ ...\\ b_m \end{bmatrix},a_j=\begin{bmatrix} a_{1j}\\ a_{2j}\\ ...\\ a_{mj} \end{bmatrix} \\2.Ax=b \\系数矩阵A表示为:[a_1,a_2,...,a_n],其中a_1,..,a_n是系数矩阵的列向量 \\未知数向量为: \\x=\begin{bmatrix} x_1\\ x_2\\ ...\\ x_n \end{bmatrix} 方程组可表示为1.a1​x1​+....+an​xn​=bb= ​b1​b2​...bm​​ ​,aj​= ​a1j​a2j​...amj​​ ​2.Ax=b系数矩阵A表示为:[a1​,a2​,...,an​],其中a1​,..,an​是系数矩阵的列向量未知数向量为:x= ​x1​x2​...xn​​

增广矩阵

基础

  • 增广矩阵为 [ A , b ] = [ a 1 , a 2 , . . . , a n , b ] 增广矩阵为[A,b]=[a_1,a_2,...,a_n,b] 增广矩阵为[A,b]=[a1​,a2​,...,an​,b]

  • 方程组Ax=b有解,当且仅当
    r a n k A = r a n k [ A , b ] rank A=rank[A,b] rankA=rank[A,b]

  • 线性方程组有解的条件通常与其系数矩阵和增广矩阵的秩有关。

    • 具体来说,一个线性方程组有解当且仅当其系数矩阵的秩等于增广矩阵的秩。
    • 如果系数矩阵的秩等于未知数的数量,则方程组有唯一解
    • 如果系数矩阵的秩小于未知数的数量,则方程组有无穷多解。
      此时, A x = b , A ∈ R m × n , r a n k A = m ,可通过为 n − m 个未知数赋予任意值并求解其他未知数来获得 A x = b 的解。 Ax=b,A\in R^{m\times n},rank A=m,可通过为n-m个未知数赋予任意值并求解 其他 未知数来获得Ax=b的解。 Ax=b,A∈Rm×n,rankA=m,可通过为n−m个未知数赋予任意值并求解其他未知数来获得Ax=b的解。
  • 解是满足线性方程组中所有方程的未知数的值。对于线性方程组,解可以是唯一的、无穷多的或不存在的。解的存在性和数量由系数矩阵和增广矩阵的秩决定。

一、增广矩阵的作用

  1. 集中表示:增广矩阵将线性方程组的系数和常数项集中表示在一个矩阵中,这种表示方式便于后续的矩阵运算和解方程过程。
  2. 简化求解:通过对增广矩阵进行初等行变换(如交换两行、某一行乘以非零常数、某一行加上另一行的若干倍)来求解线性方程组。这些行变换可以将增广矩阵化为行最简形式或阶梯形,从而直接读出方程组的解或者判断解的情况(如唯一解、无穷多解或无解)。这种方法比传统的代入法或消元法更为直观和高效。可以将其化为行最简形或阶梯形,从而直接读出方程组的解或判断解的情况(如唯一解、无穷多解或无解)。这种方法比传统的代入法或消元法更为直观和高效。
  3. 判断解的存在性:增广矩阵的秩与原系数矩阵的秩之间的关系是判断线性方程组解的存在性的重要依据。如果增广矩阵的秩大于等于系数矩阵的秩,那么原线性方程组至少有一个解;如果增广矩阵的秩小于系数矩阵的秩,则原线性方程组无解。
  4. 在高斯消元法中的应用
    高斯消元法是求解线性方程组的一种常用方法,而增广矩阵是高斯消元法的基础。通过对增广矩阵进行行变换,可以逐步消去未知数前的系数,最终得到一个上三角矩阵或行最简形矩阵,从而求解出线性方程组的解。

二、增广矩阵的实际应用例题

以下是一个使用增广矩阵求解线性方程组的实际例题:

例题:求解线性方程组

{ x + 2 y = 5 , 2 x + 3 y = − 2 , 6 x + 7 y = 1. \begin{cases} x + 2y = 5, \\ 2x + 3y = -2, \\ 6x + 7y = 1. \end{cases} ⎩ ⎧​x+2y=5,2x+3y=−2,6x+7y=1.​

解题步骤

  1. 构造增广矩阵
    原方程组的系数矩阵为
    A = ( 1 2 2 3 6 7 ) , A = \begin{pmatrix} 1 & 2 \\ 2 & 3 \\ 6 & 7 \end{pmatrix}, A= ​126​237​ ​,
    常数项向量为
    b = ( 5 − 2 1 ) . b = \begin{pmatrix} 5 \\ -2 \\ 1 \end{pmatrix}. b= ​5−21​ ​.
    将常数项向量添加到系数矩阵的右侧,得到增广矩阵
    A ˉ = ( A ∣ b ) = ( 1 2 5 2 3 − 2 6 7 1 ) . \bar{A} = (A | b) = \begin{pmatrix} 1 & 2 & 5 \\ 2 & 3 & -2 \\ 6 & 7 & 1 \end{pmatrix}. Aˉ=(A∣b)= ​126​237​5−21​ ​.

  2. 使用初等行变换化简增广矩阵

    • 第2行减去第1行的2倍,得
      ( 1 2 5 0 − 1 − 12 6 7 1 ) . \begin{pmatrix} 1 & 2 & 5 \\ 0 & -1 & -12 \\ 6 & 7 & 1 \end{pmatrix}. ​106​2−17​5−121​ ​.
    • 第3行减去第1行的6倍,得
      ( 1 2 5 0 − 1 − 12 0 − 5 − 29 ) . \begin{pmatrix} 1 & 2 & 5 \\ 0 & -1 & -12 \\ 0 & -5 & -29 \end{pmatrix}. ​100​2−1−5​5−12−29​ ​.
    • 第3行减去第2行的-5倍,得
      ( 1 2 5 0 − 1 − 12 0 0 1 ) . \begin{pmatrix} 1 & 2 & 5 \\ 0 & -1 & -12 \\ 0 & 0 & 1 \end{pmatrix}. ​100​2−10​5−121​ ​.
    • 通过行变换将增广矩阵化为行最简形(此处略去具体步骤,仅展示结果),得
      ( 1 0 19 0 1 12 0 0 1 ) . \begin{pmatrix} 1 & 0 & 19 \\ 0 & 1 & 12 \\ 0 & 0 & 1 \end{pmatrix}. ​100​010​19121​ ​.(注意:此处的行最简形可能与原始答案不完全一致,因为行变换的方式不唯一)
  3. 读取解:从行最简形增广矩阵中可以直接读出方程组的解为
    { x = 19 − z , y = 12 − z , z = 自由变量 . \begin{cases} x = 19 - z, \\ y = 12 - z, \\ z = \text{自由变量}. \end{cases} ⎩ ⎧​x=19−z,y=12−z,z=自由变量.​
    由于方程组中有三个未知数但只有两个独立方程,因此有一个自由变量(这里选择 z z z作为自由变量)。当给定 z z z的一个值时,可以求出 x x x和 y y y的相应值。例如,当 z = 0 z=0 z=0时,方程组的解为 x = 19 , y = 12 x=19, y=12 x=19,y=12。

通过以上例题可以看出,增广矩阵在求解线性方程组时具有重要的作用和广泛的应用。

高斯消元法

基础

定义
高斯消元法是一种用于求解线性方程组的算法。它通过对方程组的增广矩阵进行一系列初等行变换,将其化为行最简形或阶梯形,从而直接读出方程组的解或判断解的情况。

应用
高斯消元法广泛应用于数学、计算机科学、工程学、物理学、经济学等多个领域。在这些领域中,很多问题的建模都涉及到线性方程组,而高斯消元法提供了一种有效且系统的求解方法。

例子
考虑以下线性方程组:

{ x + 2 y = 5 , 2 x + 3 y = − 2. \begin{cases} x + 2y = 5, \\ 2x + 3y = -2. \end{cases} {x+2y=5,2x+3y=−2.​

使用高斯消元法求解的步骤如下:

  1. 构造增广矩阵:

A ˉ = ( 1 2 5 2 3 − 2 ) . \bar{A} = \begin{pmatrix} 1 & 2 & 5 \\ 2 & 3 & -2 \end{pmatrix}. Aˉ=(12​23​5−2​).

  1. 使用初等行变换化简增广矩阵:
    • 第2行减去第1行的2倍,得

( 1 2 5 0 − 1 − 12 ) . \begin{pmatrix} 1 & 2 & 5 \\ 0 & -1 & -12 \end{pmatrix}. (10​2−1​5−12​).

  1. 将第2行乘以-1,得

( 1 2 5 0 1 12 ) . \begin{pmatrix} 1 & 2 & 5 \\ 0 & 1 & 12 \end{pmatrix}. (10​21​512​).

  1. 第1行减去第2行的2倍,得

( 1 0 − 19 0 1 12 ) . \begin{pmatrix} 1 & 0 & -19 \\ 0 & 1 & 12 \end{pmatrix}. (10​01​−1912​).

此时,增广矩阵已经化为行最简形。

  1. 读取解:从行最简形增广矩阵中可以直接读出方程组的解为 x = − 19 , y = 12 x = -19, y = 12 x=−19,y=12。

例题
求解以下线性方程组:

{ x + y + z = 6 , 2 y + 5 z = − 4 , 2 x + 5 y − z = 27. \begin{cases} x + y + z = 6, \\ 2y + 5z = -4, \\ 2x + 5y - z = 27. \end{cases} ⎩ ⎧​x+y+z=6,2y+5z=−4,2x+5y−z=27.​

解题步骤

  1. 构造增广矩阵:

A ˉ = ( 1 1 1 6 0 2 5 − 4 2 5 − 1 27 ) . \bar{A} = \begin{pmatrix} 1 & 1 & 1 & 6 \\ 0 & 2 & 5 & -4 \\ 2 & 5 & -1 & 27 \end{pmatrix}. Aˉ= ​102​125​15−1​6−427​ ​.

  1. 使用初等行变换化简增广矩阵:
    • 第3行减去第1行的2倍,得

( 1 1 1 6 0 2 5 − 4 0 3 − 3 15 ) . \begin{pmatrix} 1 & 1 & 1 & 6 \\ 0 & 2 & 5 & -4 \\ 0 & 3 & -3 & 15 \end{pmatrix}. ​100​123​15−3​6−415​ ​.

  • 第3行减去第2行的1.5倍,得

( 1 1 1 6 0 2 5 − 4 0 0 − 10.5 21 ) . \begin{pmatrix} 1 & 1 & 1 & 6 \\ 0 & 2 & 5 & -4 \\ 0 & 0 & -10.5 & 21 \end{pmatrix}. ​100​120​15−10.5​6−421​ ​.

  • 将第3行除以-10.5,得

( 1 1 1 6 0 2 5 − 4 0 0 1 − 2 ) . \begin{pmatrix} 1 & 1 & 1 & 6 \\ 0 & 2 & 5 & -4 \\ 0 & 0 & 1 & -2 \end{pmatrix}. ​100​120​151​6−4−2​ ​.

  • 第2行减去第3行的5倍,得

( 1 1 1 6 0 2 0 6 0 0 1 − 2 ) . \begin{pmatrix} 1 & 1 & 1 & 6 \\ 0 & 2 & 0 & 6 \\ 0 & 0 & 1 & -2 \end{pmatrix}. ​100​120​101​66−2​ ​.

  • 第1行减去第3行,得

( 1 1 0 8 0 2 0 6 0 0 1 − 2 ) . \begin{pmatrix} 1 & 1 & 0 & 8 \\ 0 & 2 & 0 & 6 \\ 0 & 0 & 1 & -2 \end{pmatrix}. ​100​120​001​86−2​ ​.

  • 第1行减去第2行的0.5倍,得

( 1 0 0 5 0 2 0 6 0 0 1 − 2 ) . \begin{pmatrix} 1 & 0 & 0 & 5 \\ 0 & 2 & 0 & 6 \\ 0 & 0 & 1 & -2 \end{pmatrix}. ​100​020​001​56−2​ ​.

  • 将第2行除以2,得

( 1 0 0 5 0 1 0 3 0 0 1 − 2 ) . \begin{pmatrix} 1 & 0 & 0 & 5 \\ 0 & 1 & 0 & 3 \\ 0 & 0 & 1 & -2 \end{pmatrix}. ​100​010​001​53−2​ ​.

此时,增广矩阵已经化为行最简形。

  1. 读取解:从行最简形增广矩阵中可以直接读出方程组的解为 x = 5 , y = 3 , z = − 2 x = 5, y = 3, z = -2 x=5,y=3,z=−2。

julia代码实现

在Julia中实现高斯消元法,我们可以编写一个函数,该函数接受一个增广矩阵作为输入,并通过初等行变换将其化简为行最简形,从而求解线性方程组。以下是一个简单的实现示例:

function gaussian_elimination(B)  
    A=Float64.(B)
    n = size(A, 1)  
    for k = 1:n-1  
        # 找到主元下标  
        maxindex = k  
        for i = k+1:n  
            if abs(A[i, k]) > abs(A[maxindex, k])  
                maxindex = i  
            end  
        end  
  
        # 交换行  
        if maxindex != k  
            for j = k:n+1  
                A[k, j], A[maxindex, j] = A[maxindex, j], A[k, j]  
            end  
        end  
  
        # 消元  
        for i = k+1:n  
            factor = A[i, k] / A[k, k]  
            for j = k:n+1  
                A[i, j] = A[i, j] - factor * A[k, j]  
            end  
        end  
    end  
  
    # 回代求解  
    x = zeros(n)  
    for i = n:-1:1  
        x[i] = A[i, n+1]  
        for j = i+1:n  
            x[i] = x[i] - A[i, j] * x[j]  
        end  
        x[i] = x[i] / A[i, i]  
    end  
  
    return x  
end  
  
# 示例  
A = [1 1 1 6; 0 2 5 -4; 2 5 -1 27]  
x = gaussian_elimination(A)  
println(x)

这段代码定义了一个gaussian_elimination函数,它接受一个增广矩阵A作为输入,并返回线性方程组的解x。在示例中,我们构造了一个3x4的增广矩阵A,然后调用gaussian_elimination函数求解,并打印结果。

请注意,这个实现没有进行错误处理,比如检查矩阵是否为奇异矩阵(即没有唯一解的情况)。在实际应用中,你可能需要添加这样的检查来确保算法的健壮性。

高斯消元法算法

方阵高斯消元法

是一种用于解线性方程组的数值算法,其基本思想是通过行变换将系数矩阵化为上三角矩阵,然后通过回代求解未知量。以下是高斯消元法的一般算法描述:

输入

  • 系数矩阵 A A A,大小为 n × n n \times n n×n
  • 常数项向量 b b b,大小为 n × 1 n \times 1 n×1

输出

  • 解向量 x x x,大小为 n × 1 n \times 1 n×1

算法步骤

  1. 构造增广矩阵

    • 将系数矩阵 A A A 和常数项向量 b b b 组合成一个增广矩阵 [ A ∣ b ] [A | b] [A∣b]。
  2. 前向消元

    • 对于 k = 1 k = 1 k=1 到 n − 1 n-1 n−1:
      a. 选择主元:找到第 k k k 列中从第 k k k 行到第 n n n 行中绝对值最大的元素,并将其所在行与第 k k k 行交换。
      b. 消元:对于 i = k + 1 i = k+1 i=k+1 到 n n n,计算乘数 m = A [ i , k ] / A [ k , k ] m = A[i, k] / A[k, k] m=A[i,k]/A[k,k],然后更新第 i i i 行: A [ i , j ] = A [ i , j ] − m × A [ k , j ] A[i, j] = A[i, j] - m \times A[k, j] A[i,j]=A[i,j]−m×A[k,j],其中 j = k j = k j=k 到 n n n。
  3. 回代求解

    • 对于 i = n i = n i=n 到 1 1 1 的逆序:
      a. 计算 x [ i ] x[i] x[i]: x [ i ] = ( b [ i ] − ∑ j = i + 1 n A [ i , j ] × x [ j ] ) / A [ i , i ] x[i] = (b[i] - \sum_{j = i+1}^{n} A[i, j] \times x[j]) / A[i, i] x[i]=(b[i]−∑j=i+1n​A[i,j]×x[j])/A[i,i]。
  4. 输出解向量 x x x。

注意事项

  • 在前向消元过程中,如果主元 A [ k , k ] A[k, k] A[k,k] 为零或接近零,则算法可能会失败或导致数值不稳定。此时需要进行行交换或采用其他策略。
  • 如果在消元过程中发现某一行变为全零行,并且该行对应的常数项不为零,则线性方程组无解。
  • 如果在消元过程中发现某一行变为全零行,并且该行对应的常数项也为零,则线性方程组有无穷多解。在这种情况下,算法可能只能求出部分解或特解。
非方阵的情况

它同样适用于非方阵的情况,即增广矩阵(系数矩阵与常数项向量组合而成的矩阵)的行数可能不等于列数。以下是高斯消元法的一般算法描述,适用于非方阵情况:

  1. 输入:增广矩阵 A A A,其中包含了系数矩阵和常数项向量。

  2. 初始化:设置当前处理的行 i = 1 i = 1 i=1。

  3. 主循环:当 i ≤ min ⁡ ( 行数 , 列数 ) i \leq \min(\text{行数}, \text{列数}) i≤min(行数,列数) 时执行以下步骤:

    a. 寻找主元:在 i i i 到 行数 \text{行数} 行数 的范围内,找到第 i i i 列绝对值最大的元素,并将其所在行与第 i i i 行交换(如果已经是第 i i i 行则无需交换)。

    b. 消元:对于 j = i + 1 j = i + 1 j=i+1 到 行数 \text{行数} 行数 的每一行,执行以下操作:

    • 计算乘数 m = A [ j , i ] / A [ i , i ] m = A[j, i] / A[i, i] m=A[j,i]/A[i,i]。
    • 对于 k = i k = i k=i 到 列数 \text{列数} 列数 的每一个元素,执行 A [ j , k ] = A [ j , k ] − m × A [ i , k ] A[j, k] = A[j, k] - m \times A[i, k] A[j,k]=A[j,k]−m×A[i,k]。

    c. 递增: i = i + 1 i = i + 1 i=i+1。

  4. 回代求解

    a. 对于 i = min ⁡ ( 行数 , 列数 ) i = \min(\text{行数}, \text{列数}) i=min(行数,列数) 到 1 1 1 的逆序,执行以下操作:

    • 计算 A [ i , 列数 + 1 ] A[i, \text{列数} + 1] A[i,列数+1](即常数项)的值,通过减去之前已经求解的变量的贡献: A [ i , 列数 + 1 ] = A [ i , 列数 + 1 ] − ∑ j = i + 1 min ⁡ ( 行数 , 列数 ) A [ i , j ] × x [ j ] A[i, \text{列数} + 1] = A[i, \text{列数} + 1] - \sum_{j = i + 1}^{\min(\text{行数}, \text{列数})} A[i, j] \times x[j] A[i,列数+1]=A[i,列数+1]−∑j=i+1min(行数,列数)​A[i,j]×x[j],其中 x [ j ] x[j] x[j] 是之前已经求解的变量。

    • 将 A [ i , i ] A[i, i] A[i,i] 的系数化为 1 1 1,即 x [ i ] = A [ i , 列数 + 1 ] / A [ i , i ] x[i] = A[i, \text{列数} + 1] / A[i, i] x[i]=A[i,列数+1]/A[i,i]。

  5. 输出:解向量 x x x,其中包含了线性方程组的解。

需要注意的是,如果矩阵的某一行在消元过程中变为全零行,并且该行对应的常数项不为零,则线性方程组无解。如果矩阵的某一行在消元过程中变为全零行,并且该行对应的常数项也为零,则线性方程组有无穷多解。在实际应用中,还需要考虑数值稳定性和精度问题。

Julia 中将整型矩阵转换为浮点型矩阵。

下面是一些常见的方法:

方法 1:使用类型转换函数

Julia 提供了 Float64Float32 等函数来将其他类型的数值转换为浮点型。对于矩阵,你可以使用广播(broadcasting)机制来应用这种转换。

# 创建一个整型矩阵
A = [1 2; 3 4]

# 将整型矩阵转换为浮点型矩阵
B = Float64.(A)

方法 2:使用 convert 函数

convert 函数是另一种转换数据类型的方法。它同样适用于矩阵。

# 创建一个整型矩阵
A = [1 2; 3 4]

# 使用 convert 函数转换为浮点型矩阵
B = convert(Array{Float64, 2}, A)

方法 3:利用矩阵运算或函数

在某些情况下,你可能在矩阵运算中自然地得到浮点型结果,例如,当你将整型矩阵除以一个整数时。

# 创建一个整型矩阵
A = [1 2; 3 4]

# 通过运算转换为浮点型矩阵
B = A / 1.0

方法 4:使用 map 函数

map 函数可以将一个函数应用于矩阵的每个元素。通过这种方法,你也可以将整型矩阵转换为浮点型矩阵。

# 创建一个整型矩阵
A = [1 2; 3 4]

# 使用 map 函数转换为浮点型矩阵
B = map(Float64, A)

以上就是在 Julia 中将整型矩阵转换为浮点型矩阵的几种常见方法。选择哪种方法取决于你的具体需求和偏好。

参考文献

1.《最优化导论》
2.文心一言
3.chatgpt

标签:10,代数,end,增广,线性方程组,矩阵,12,pmatrix,精解
From: https://blog.csdn.net/sakura_sea/article/details/141829884

相关文章

  • 南沙信奥赛老师解一本通题:1410:最大质因子序列
    ​【题目描述】任意输入两个正整数m,n(1<m<n≤5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。【输入】一行,包含两个正整数m和n,其间以单个空格间隔。【输出】一行,每个整数的最大质因子,以逗号间隔。【输入样例】510【输......
  • 10 Python面向对象编程:类和对象以及和Java的对比
    本篇是Python系列教程第10篇,更多内容敬请访问我的Python合集这里只介绍类和对象,self、属性、方法、访问控制、类继承、方法重写在后面的文章里介绍在Python中,类和对象是面向对象编程的基础。1类的概念类是一种创建对象的蓝图或模板。它定义了一组属性(变量)和方法(函......
  • P9108 [PA2020] Malowanie płotu
    题意:给定\(n,m\),一个区间序列\(\{[L_1,R_1],[L_2,R_2],\cdots,[L_n,R_n]\}\)被称为好的当且仅当:\(\foralli\in[1,n],1\leL_i\leR_i\lem\)。\(\foralli\in[1,n-1],[L_i,R_i]\cup[L_{i+1},R_{i+1}]\ne\emptyset\)。输出好的序列个数对给定质数\(p\)......
  • 10年网安经验分享:一般人别瞎入网络安全行业
    小白入门网络安全,如何选择方向?如果你是一个新手小白,那么在最开始方向选择上面这一步是至关重要的,一旦你选错了那很可能就要和安全“saygoodbye”了。很多小白刚开始的时候还没开始学会走就想着飞了,计算机功底都没学好就说要去渗透一个网站,要去学逆向破解一个APP,结果折腾了......
  • 「代码随想录算法训练营」第五十二天 | 图论 part10
    目录Floyd算法题目:97.小明逛公园A*算法题目:126.骑士的攻击最短路算法总结Floyd算法Floyd算法用于求解多源最短路问题(求多个起点到多个终点的多条最短路径)。在前面学习的dijkstra算法、Bellman算法都是求解单源最短路的问题(即只能有一个起点)。注意:Floyd算法对边的权值正负没......
  • 第六章习题1-用筛选法求100以内的素数
     ......
  • 三、STM32F103标准库DMA+USART接收不定长数据
    项目中常用到串口通信,当需要使用串口中断接不定长数据时,可以参考以下示例:本实例使用DMA+USART空闲中断来进行不定长数据接受,在数据接收完成后将数据透传。结果将通过另一个串口信息显示。1、主函数配置#include"stm32f10x.h"#include"printfsupport.h"#include"usar......
  • P10878 [JRKSJ R9] 在相思树下 III 题解
    Description给定一个长为\(n\)的序列\(a_{1\dotsn}\),需要对它进行两种操作共\(n-1\)次。对一个长度为\(l\)的序列\(b_{1\dotsl}\)进行一次操作将会把序列变为一个长为\(l-1\)的序列\(c_{1\dotsl-1}\):操作一中,\(\foralli\in[1,l),c_i=\max(b_i,b_{i+1})\);操作......
  • CF 2100-2400 strings 乱做
    CF1995DCases显然如果选了某个字符那么不妨选它出现的所有位置。check方式等价于相邻两个选择的位置间距\(\lek\),等价于连续\(k\)个必须选一个(最后一个必须选)枚举位置维护字符集是做不了的,状态数\(O(n2^c)\)无法优化考虑枚举字符集\(s\)。设原串连续\(k\)个字符的字......
  • 1049. 最后一块石头的重量 II(leetcode)
    https://leetcode.cn/problems/last-stone-weight-ii/description/思路较为巧妙的dp题,关键点在于如何将问题转化为01背包,有点贪心的思想主要是划分为两堆尽可能相等的石碓,然后判断能否凑出这个偏小的石碓(若干石头中选,能否选出这个价值)这里根据f[i]的定义可以有两种做法,1.f......