MINIBLOG

Blog Note Tags Links About
Home Search
Apr 11, 2026
miniyuan

解线性方程组的迭代法


题 3.1

  1. Jacobi 迭代法

    [10000100005]x(k+1)=[021201120]x(k)+[31510]\begin{bmatrix} 10 & 0 & 0 \\ 0 & 10 & 0 \\ 0 & 0 & 5 \\ \end{bmatrix} \mathbf{x}^{(k+1)} = \begin{bmatrix} 0 & 2 & 1 \\ 2 & 0 & 1 \\ 1 & 2 & 0 \\ \end{bmatrix} \mathbf{x}^{(k)} + \begin{bmatrix} 3 \\ 15 \\ 10 \\ \end{bmatrix}​1000​0100​005​​x(k+1)=​021​202​110​​x(k)+​31510​​

    也即有迭代公式:

    {x1(k+1)=2x2(k)+x3(k)+310x2(k+1)=2x1(k)+x3(k)+1510x3(k+1)=x1(k)+2x2(k)+105\begin{cases} x_1^{(k+1)} = \dfrac{2x_2^{(k)} + x_3^{(k)} + 3}{10} \\ x_2^{(k+1)} = \dfrac{2x_1^{(k)} + x_3^{(k)} + 15}{10} \\ x_3^{(k+1)} = \dfrac{x_1^{(k)} + 2x_2^{(k)} + 10}{5} \end{cases}⎩⎨⎧​x1(k+1)​=102x2(k)​+x3(k)​+3​x2(k+1)​=102x1(k)​+x3(k)​+15​x3(k+1)​=5x1(k)​+2x2(k)​+10​​

    代入 x(0)=[0,0,0]⊤x^{(0)}=[0,0,0]^\topx(0)=[0,0,0]⊤ 得 x(1)=[3/10, 3/2, 2]⊤\mathbf{x}^{(1)} = [3/10,\ 3/2,\ 2]^\topx(1)=[3/10, 3/2, 2]⊤

    {x1(2)=2(3/2)+2+310=3+2+310=45x2(2)=2(3/10)+2+1510=3/5+2+1510=4425x3(2)=3/10+2(3/2)+105=3/10+3+105=13350\begin{cases} x_1^{(2)} = \frac{2(3/2) + 2 + 3}{10} = \frac{3+2+3}{10} = \frac{4}{5} \\ x_2^{(2)} = \frac{2(3/10) + 2 + 15}{10} = \frac{3/5+2+15}{10} = \frac{44}{25} \\ x_3^{(2)} = \frac{3/10 + 2(3/2) + 10}{5} = \frac{3/10+3+10}{5} = \frac{133}{50} \end{cases}⎩⎨⎧​x1(2)​=102(3/2)+2+3​=103+2+3​=54​x2(2)​=102(3/10)+2+15​=103/5+2+15​=2544​x3(2)​=53/10+2(3/2)+10​=53/10+3+10​=50133​​

    也即 x(2)=[0.8, 1.76, 2.66]⊤\mathbf{x}^{(2)} = [0.8,\ 1.76,\ 2.66]^\topx(2)=[0.8, 1.76, 2.66]⊤

  2. Gauss-Seidel 迭代法

    [1000−2100−1−25]x(k+1)=[021001000]x(k)+[31510]\begin{bmatrix} 10 & 0 & 0 \\ -2 & 10 & 0 \\ -1 & -2 & 5 \\ \end{bmatrix} \mathbf{x}^{(k+1)} = \begin{bmatrix} 0 & 2 & 1 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \\ \end{bmatrix} \mathbf{x}^{(k)} + \begin{bmatrix} 3 \\ 15 \\ 10 \\ \end{bmatrix}​10−2−1​010−2​005​​x(k+1)=​000​200​110​​x(k)+​31510​​

    也即有迭代公式:

    {x1(k+1)=2x2(k)+x3(k)+310x2(k+1)=2x1(k+1)+x3(k)+1510x3(k+1)=x1(k+1)+2x2(k+1)+105\begin{cases} x_1^{(k+1)} = \dfrac{2x_2^{(k)} + x_3^{(k)} + 3}{10} \\ x_2^{(k+1)} = \dfrac{2x_1^{(k+1)} + x_3^{(k)} + 15}{10} \\ x_3^{(k+1)} = \dfrac{x_1^{(k+1)} + 2x_2^{(k+1)} + 10}{5} \end{cases}⎩⎨⎧​x1(k+1)​=102x2(k)​+x3(k)​+3​x2(k+1)​=102x1(k+1)​+x3(k)​+15​x3(k+1)​=5x1(k+1)​+2x2(k+1)​+10​​

    代入 x(0)=[0,0,0]⊤x^{(0)}=[0,0,0]^\topx(0)=[0,0,0]⊤ 得:

    {x1(1)=310x2(1)=2(3/10)+1510=3/5+1510=3925x3(1)=3/10+2(39/25)+105=3/10+78/25+105=671250\begin{cases} x_1^{(1)} = \frac{3}{10} \\ x_2^{(1)} = \frac{2(3/10) + 15}{10} = \frac{3/5+15}{10} = \frac{39}{25} \\ x_3^{(1)} = \frac{3/10 + 2(39/25) + 10}{5} = \frac{3/10+78/25+10}{5} = \frac{671}{250} \end{cases}⎩⎨⎧​x1(1)​=103​x2(1)​=102(3/10)+15​=103/5+15​=2539​x3(1)​=53/10+2(39/25)+10​=53/10+78/25+10​=250671​​ {x1(2)=2(39/25)+671/250+310=22012500x2(2)=2(2201/2500)+671/250+1510=121536250x3(2)=2201/2500+2(12153/6250)+105=18461762500\begin{cases} x_1^{(2)} = \frac{2(39/25) + 671/250 + 3}{10} = \frac{2201}{2500} \\ x_2^{(2)} = \frac{2(2201/2500) + 671/250 + 15}{10} = \frac{12153}{6250} \\ x_3^{(2)} = \frac{2201/2500 + 2(12153/6250) + 10}{5} = \frac{184617}{62500} \end{cases}⎩⎨⎧​x1(2)​=102(39/25)+671/250+3​=25002201​x2(2)​=102(2201/2500)+671/250+15​=625012153​x3(2)​=52201/2500+2(12153/6250)+10​=62500184617​​

    也即 x(2)=[0.8804, 1.94448, 2.953872]⊤\mathbf{x}^{(2)} = [0.8804,\ 1.94448,\ 2.953872]^\topx(2)=[0.8804, 1.94448, 2.953872]⊤

题 3.2

迭代格式为:

[a1100a22]x(k+1)=[0−a12−a210]x(k)+[b1b2]\begin{bmatrix} a_{11} & 0 \\ 0 & a_{22} \end{bmatrix} \mathbf{x}^{(k+1)} = \begin{bmatrix} 0 & -a_{12} \\ -a_{21} & 0 \end{bmatrix} \mathbf{x}^{(k)} + \begin{bmatrix} b_1 \\ b_2 \end{bmatrix}[a11​0​0a22​​]x(k+1)=[0−a21​​−a12​0​]x(k)+[b1​b2​​]

从而迭代矩阵:

M=[0−a12/a11−a21/a220]\mathbf{M} = \begin{bmatrix} 0 & -a_{12}/a_{11} \\-a_{21}/a_{22} & 0 \end{bmatrix}M=[0−a21​/a22​​−a12​/a11​0​]

特征根为 λ=±a12a21a11a22\lambda = \pm \sqrt{\frac{a_{12}a_{21}}{a_{11}a_{22}}}λ=±a11​a22​a12​a21​​​(注意可能为纯虚数),从而谱半径:

ρ(M)=∣a12a21a11a22∣\rho(\mathbf{M}) = \sqrt{\left| \frac{a_{12}a_{21}}{a_{11}a_{22}} \right|}ρ(M)=​a11​a22​a12​a21​​​​

迭代收敛的充要条件为 ∣a12a21a11a22∣<1\sqrt{| \frac{a_{12}a_{21}}{a_{11}a_{22}} |} \lt 1∣a11​a22​a12​a21​​∣​<1,也即迭代收敛的充要条件为:

∣a12a21a11a22∣<1\left| \frac{a_{12}a_{21}}{a_{11}a_{22}} \right| \lt 1​a11​a22​a12​a21​​​<1

题 3.3

  1. 最速下降法

    编写 python 代码如下:

    import numpy as np
    
    x = np.array([0, 0, 0], dtype=float)
    A = np.array([[4, 3, 0], [3, 4, -1], [0, -1, 4]], dtype=float)
    b = np.array([24, 30, -24], dtype=float)
    r = b - A @ x
    
    print(f"x^(0) = {x}")
    print(f"r^(0) = {r}")
    
    for k in range(3):
        t = A @ r
        alpha = np.dot(r, r) / np.dot(r, t)  # 步长
        x += alpha * r                       # 更新解
        r -= alpha * t                       # 更新残差
        print(f"alpha^({k}) = {alpha:.5f}")
        print(f"x^({k+1}) = {x}")
        print(f"r^({k+1}) = {r}")

    运行结果:

    x^(0) = [0. 0. 0.]
    r^(0) = [ 24.  30. -24.]
    alpha^(0) = 0.14691
    x^(1) = [ 3.5257732   4.40721649 -3.5257732 ]
    r^(1) = [-3.32474227 -1.73195876 -5.48969072]
    alpha^(1) = 0.22980
    x^(2) = [ 2.76173276  4.00920473 -4.78732834]
    r^(2) = [ 0.92545478  0.89065447 -0.84148191]
    alpha^(2) = 0.14852
    x^(3) = [ 2.89917841  4.14148195 -4.9123026 ]
    r^(3) = [-0.02115948 -0.17576563 -0.20930764]

    从而得到

    x(3)≈[2.8992, 4.1415, −4.9123]⊤\mathbf{x}^{(3)} \approx [2.8992,\ 4.1415,\ -4.9123]^\topx(3)≈[2.8992, 4.1415, −4.9123]⊤

    绝对误差约为

    e(3)≈[−0.1008, 0.1415, 0.0877]⊤\mathbf{e}^{(3)} \approx [-0.1008,\ 0.1415,\ 0.0877]^\tope(3)≈[−0.1008, 0.1415, 0.0877]⊤
  2. 共轭梯度法

    编写 python 代码如下:

    import numpy as np
    
    x = np.array([0, 0, 0], dtype=float)
    A = np.array([[4, 3, 0], [3, 4, -1], [0, -1, 4]], dtype=float)
    b = np.array([24, 30, -24], dtype=float)
    r = b - A @ x
    d = r.copy()
    r_norm = np.dot(r, r)         # 存储 ||r||^2
    
    print(f"x^(0) = {x}")
    print(f"r^(0) = {r}")
    print(f"d^(0) = {d}")
    
    for k in range(3):
        t = A @ d
        s = np.dot(d, t)
        alpha = np.dot(r, d) / s  # 步长
        x += alpha * d            # 更新解
        r -= alpha * t            # 更新残差
    
        r_norm_new = np.dot(r, r)
        beta = r_norm_new / r_norm
        r_norm = r_norm_new
    
        d = r + beta * d          # 更新搜索方向
        print(f"alpha^({k}) = {alpha:.5f}")
        print(f"beta^({k}) = {beta:.5f}")
        print(f"x^({k+1}) = {x}")
        print(f"r^({k+1}) = {r}")
        print(f"d^({k+1}) = {d}")
    

    运行结果:

    x^(0) = [0. 0. 0.]
    r^(0) = [ 24.  30. -24.]
    d^(0) = [ 24.  30. -24.]
    alpha^(0) = 0.14691
    beta^(0) = 0.02154
    x^(1) = [ 3.5257732   4.40721649 -3.5257732 ]
    r^(1) = [-3.32474227 -1.73195876 -5.48969072]
    d^(1) = [-2.80789669 -1.0859018  -6.0065363 ]
    alpha^(1) = 0.23782
    beta^(1) = 0.00071
    x^(2) = [ 2.85801112  4.14897194 -4.95422216]
    r^(2) = [ 0.1210397  -0.12414328 -0.0341394 ]
    d^(2) = [ 0.11905546 -0.12491065 -0.038384  ]
    alpha^(2) = 1.19263
    beta^(2) = 0.00000
    x^(3) = [ 3.  4. -5.]
    r^(3) = [-1.80411242e-15 -1.44328993e-15 -1.03389519e-15]
    d^(3) = [-1.80411242e-15 -1.44328993e-15 -1.03389519e-15]

    从而得到

    x(2)≈[2.8580, 4.1490, −4.9542]⊤\mathbf{x}^{(2)} \approx [2.8580,\ 4.1490,\ -4.9542]^\topx(2)≈[2.8580, 4.1490, −4.9542]⊤

    绝对误差约为

    e(2)≈[−0.1420, 0.1490, 0.0458]⊤\mathbf{e}^{(2)} \approx [-0.1420,\ 0.1490,\ 0.0458]^\tope(2)≈[−0.1420, 0.1490, 0.0458]⊤

题 3.4

证明:

因为 A=D−L−U\mathbf{A} = \mathbf{D} - \mathbf{L} - \mathbf{U}A=D−L−U,所以:

B=I−D−1(D−L−U)=D−1L+D−1U\mathbf{B} = \mathbf{I} - \mathbf{D}^{-1} (\mathbf{D} - \mathbf{L} - \mathbf{U}) = \mathbf{D}^{-1} \mathbf{L} + \mathbf{D}^{-1} \mathbf{U}B=I−D−1(D−L−U)=D−1L+D−1U

其中 D−1L\mathbf{D}^{-1} \mathbf{L}D−1L 为严格下三角矩阵,D−1U\mathbf{D}^{-1} \mathbf{U}D−1U 为严格上三角矩阵。

于是式 P3.4-1\text{P3.4-1}P3.4-1 可化为:

x~(k)=D−1Ux(k)+D−1Lx~(k)+g\tilde{\mathbf{x}}^{(k)} = \mathbf{D}^{-1} \mathbf{U} \mathbf{x}^{(k)} + \mathbf{D}^{-1} \mathbf{L} \tilde{\mathbf{x}}^{(k)} + \mathbf{g}x~(k)=D−1Ux(k)+D−1Lx~(k)+g

也即:

x~(k)=(I−D−1L)−1(D−1Ux(k)+g)=(D−L)−1(Ux(k)+Dg)\begin{aligned} \tilde{\mathbf{x}}^{(k)} &= (\mathbf{I} - \mathbf{D}^{-1} \mathbf{L})^{-1} (\mathbf{D}^{-1} \mathbf{U} \mathbf{x}^{(k)} + \mathbf{g}) \\ &= (\mathbf{D} - \mathbf{L})^{-1} (\mathbf{U} \mathbf{x}^{(k)} + \mathbf{D} \mathbf{g}) \end{aligned}x~(k)​=(I−D−1L)−1(D−1Ux(k)+g)=(D−L)−1(Ux(k)+Dg)​

式 P3.4-2\text{P3.4-2}P3.4-2 可化为:

x(k+1)=D−1Ux(k+1)+D−1Lx~(k)+g\mathbf{x}^{(k+1)} = \mathbf{D}^{-1} \mathbf{U} \mathbf{x}^{(k+1)} + \mathbf{D}^{-1} \mathbf{L} \tilde{\mathbf{x}}^{(k)} + \mathbf{g}x(k+1)=D−1Ux(k+1)+D−1Lx~(k)+g

也即:

x(k+1)=(I−D−1U)−1(D−1Lx~(k)+g)=(D−U)−1(Lx~(k)+Dg)=(D−U)−1[L(D−L)−1(Ux(k)+Dg)+Dg]=(D−U)−1L(D−L)−1Ux(k)+(D−U)−1[L(D−L)−1+I]Dg=(D−U)−1L(D−L)−1Ux(k)+(D−U)−1D(D−L)−1Dg\begin{aligned} \mathbf{x}^{(k+1)} &= (\mathbf{I} - \mathbf{D}^{-1} \mathbf{U})^{-1} (\mathbf{D}^{-1} \mathbf{L} \tilde{\mathbf{x}}^{(k)} + \mathbf{g}) \\ &= (\mathbf{D} - \mathbf{U})^{-1} (\mathbf{L} \tilde{\mathbf{x}}^{(k)} + \mathbf{D} \mathbf{g}) \\ &= (\mathbf{D} - \mathbf{U})^{-1} [\mathbf{L} (\mathbf{D} - \mathbf{L})^{-1} (\mathbf{U} \mathbf{x}^{(k)} + \mathbf{D} \mathbf{g}) + \mathbf{D} \mathbf{g}] \\ &= (\mathbf{D} - \mathbf{U})^{-1} \mathbf{L} (\mathbf{D} - \mathbf{L})^{-1} \mathbf{U} \mathbf{x}^{(k)} + (\mathbf{D} - \mathbf{U})^{-1} [\mathbf{L} (\mathbf{D} - \mathbf{L})^{-1} + \mathbf{I}] \mathbf{D} \mathbf{g} \\ &= (\mathbf{D} - \mathbf{U})^{-1} \mathbf{L} (\mathbf{D} - \mathbf{L})^{-1} \mathbf{U} \mathbf{x}^{(k)} + (\mathbf{D} - \mathbf{U})^{-1} \mathbf{D} (\mathbf{D} - \mathbf{L})^{-1} \mathbf{D} \mathbf{g} \end{aligned}x(k+1)​=(I−D−1U)−1(D−1Lx~(k)+g)=(D−U)−1(Lx~(k)+Dg)=(D−U)−1[L(D−L)−1(Ux(k)+Dg)+Dg]=(D−U)−1L(D−L)−1Ux(k)+(D−U)−1[L(D−L)−1+I]Dg=(D−U)−1L(D−L)−1Ux(k)+(D−U)−1D(D−L)−1Dg​

从而

M=(D−U)−1L(D−L)−1Uf=(D−U)−1D(D−L)−1D\begin{aligned} \mathbf{M} &= (\mathbf{D} - \mathbf{U})^{-1} \mathbf{L} (\mathbf{D} - \mathbf{L})^{-1} \mathbf{U} \\ \mathbf{f} &= (\mathbf{D} - \mathbf{U})^{-1} \mathbf{D} (\mathbf{D} - \mathbf{L})^{-1} \mathbf{D} \end{aligned}Mf​=(D−U)−1L(D−L)−1U=(D−U)−1D(D−L)−1D​

证毕。

题 3.5

我们假设己方和己方机器人的任一视线中不存在两个及以上的猎人,否则参考下图可举反例证明无法精确定位。

图 1:反例
图 1:反例

若某区域恰被 kkk 个机器人监测,则称其为 kkk 覆盖的。 我们先证明,在已知猎人数量上界 nnn 时,我们可以通过 (2n+1)(2n + 1)(2n+1) 覆盖唯一确定所有猎人的位置。 然后再利用这一性质设计确定所有猎人位置的算法,我们首先探测猎人数量的上界,然后再进行精确计算。

引理

已知猎人数量上界为 nnn 时,我们可以通过 (2n+1)(2n + 1)(2n+1) 覆盖的机器人布置唯一确定所有猎人的位置。 这里要求每个 (2n+1)(2n + 1)(2n+1) 覆盖区域的监测机器人不存在三点共线。

证明:

只需证明对每个 (2n+1)(2n + 1)(2n+1) 覆盖区域中的猎人都可以唯一确定位置, 也即证明 (2n+1)(2n + 1)(2n+1) 覆盖区域中不存在两个不完全相同的猎人集合,使得 (2n+1)(2n + 1)(2n+1) 个监测机器人对他们的视角集合完全相同。

反证法。反设机器人为 R={ R1,R2,⋯ ,Rm }\mathcal{R} = \set{R_1, R_2, \cdots, R_m}R={R1​,R2​,⋯,Rm​}, 两个不同的猎人集合 P={ Pi,P2,⋯ ,Pn }\mathcal{P} = \set{P_i, P_2, \cdots, P_n}P={Pi​,P2​,⋯,Pn​} 和 Q={ Qi,Q2,⋯ ,Qn }\mathcal{Q} = \set{Q_i, Q_2, \cdots, Q_n}Q={Qi​,Q2​,⋯,Qn​}, 其中 m=2n+1m = 2n + 1m=2n+1。

对每个机器人 RkR_kRk​,存在 nnn 排列 πk\pi_kπk​ 使得从 RkR_kRk​ 看 PiP_iPi​ 与 Qπk(i)Q_{\pi_k(i)}Qπk​(i)​ 视角相同,也即 RkPiQπk(i)R_k P_i Q_{\pi_k(i)}Rk​Pi​Qπk​(i)​ 三点共线。

定义 Sij={k∈{ 1,⋯ ,m }:πk(i)=j}S_{ij} = \{k \in \set{1, \cdots, m} : \pi_k(i) = j\}Sij​={k∈{1,⋯,m}:πk​(i)=j},即与 PiQjP_i Q_jPi​Qj​ 共线的机器人集合。

若 Pi≠QjP_i \neq Q_jPi​=Qj​,则所有 SijS_{ij}Sij​ 中的机器人都在直线 PiQjP_i Q_jPi​Qj​ 上。由机器人中无三点共线得 ∣Sij∣≤2|S_{ij}| \leq 2∣Sij​∣≤2。

因点集 P\mathcal{P}P 与点集 Q\mathcal{Q}Q 不完全相同,不妨 P1∉QP_1 \notin \mathcal{Q}P1​∈/Q。

则集合族 { S11,S12,⋯ ,S1n }\set{S_{11}, S_{12}, \cdots, S_{1n}}{S11​,S12​,⋯,S1n​} 构成了对下标集 { 1,⋯ ,m }\set{1, \cdots, m}{1,⋯,m} 的划分。 也即每个下标 k∈{ 1,⋯ ,m }k \in \set{1, \cdots, m}k∈{1,⋯,m} 都恰好属于且仅属于一个集合 S1πk(1)S_{1\pi_k(1)}S1πk​(1)​。

故有:

m=∑j=1n∣S1j∣≤2nm = \sum_{j=1}^n |S_{1j}| \leq 2nm=j=1∑n​∣S1j​∣≤2n

矛盾!

整体算法

  1. 分块: 将整个森林区域分块,划分为若干直径小于 2d2d2d 的连通子区域 D1,D2,⋯ ,DsD_1, D_2, \cdots, D_sD1​,D2​,⋯,Ds​。
  2. 探测猎人上界: 在每个子区域的中心处部署一名机器人并暴露,共计消耗 sss 个机器人。区域 DiD_iDi​ 机器人观测到不同方向的数量 nin_ini​ 即为该区域猎人数上界。 从而整体上界为 n=∑i=1snin = \sum_{i=1}^s n_in=∑i=1s​ni​。
  3. 精确定位: 对每个子区域周围部署 mi≥2ni+1m_i \ge 2n_i + 1mi​≥2ni​+1 名机器人,然后再在每个子区域的中心处部署一名机器人并暴露,共计消耗 sss 个机器人。由引理知,每个区域可以完成精确定位,从而完成了所有猎人定位。

精确定位算法

对每个非空子区域 DiD_iDi​,已知其猎人数上界 ni≤nn_i \leq nni​≤n,且周围已部署 mi≥2ni+1m_i \geq 2n_i+1mi​≥2ni​+1 台无三点共线的观测机器人 R1,…,RmiR_1, \ldots, R_{m_i}R1​,…,Rmi​​。

记第 kkk 台机器人观测到的无序方向集合为 Θk={θk,1,…,θk,tk}\Theta_k = \{\theta_{k,1}, \ldots, \theta_{k,t_k}\}Θk​={θk,1​,…,θk,tk​​}。

  1. 候选点生成:

    对每对 (α,β)∈Θ1×Θ2(\alpha, \beta) \in \Theta_1 \times \Theta_2(α,β)∈Θ1​×Θ2​,求解:

    R1+t(cos⁡αsin⁡α)=R2+s(cos⁡βsin⁡β),t,s>0R_1 + t \begin{pmatrix} \cos\alpha \\ \sin\alpha \end{pmatrix} = R_2 + s \begin{pmatrix} \cos\beta \\ \sin\beta \end{pmatrix}, \quad t, s > 0R1​+t(cosαsinα​)=R2​+s(cosβsinβ​),t,s>0

    这是关于 (t,s)(t, s)(t,s) 的 2 阶线性系统:

    (cos⁡α−cos⁡βsin⁡α−sin⁡β)(ts)=R2−R1\begin{pmatrix} \cos\alpha & -\cos\beta \\ \sin\alpha & -\sin\beta \end{pmatrix} \begin{pmatrix} t \\ s \end{pmatrix} = R_2 - R_1(cosαsinα​−cosβ−sinβ​)(ts​)=R2​−R1​
    • 若 det⁡=sin⁡(β−α)=0\det = \sin(\beta - \alpha) = 0det=sin(β−α)=0 或 t≤0t \leq 0t≤0 或 s≤0s \leq 0s≤0,舍弃该对。
    • 否则解出 (t,s)(t, s)(t,s),计算交点: Xα,β=R1+t(cos⁡αsin⁡α)X_{\alpha,\beta} = R_1 + t \begin{pmatrix} \cos\alpha \\ \sin\alpha \end{pmatrix}Xα,β​=R1​+t(cosαsinα​)

    对有效交点 Xα,βX_{\alpha,\beta}Xα,β​,验证是否位于所有机器人观测范围内:

    ∥Xα,β−Rk∥≤d,k=1,2,⋯ ,mi\|X_{\alpha,\beta} - R_k\| \leq d, \quad k = 1, 2, \cdots, m_i∥Xα,β​−Rk​∥≤d,k=1,2,⋯,mi​

    剔除不满足距离约束的点。

    进一步验证交点是否位于目标子区域 DiD_iDi​ 内:

    Xα,β∈DiX_{\alpha,\beta} \in D_iXα,β​∈Di​

    最终得到候选点集合:

    C={Xα,β:(α,β)∈Θ1×Θ2,  t,s>0,  ∥Xα,β−Rk∥≤d,  Xα,β∈Di}\mathcal{C} = \left\{ X_{\alpha,\beta} : (\alpha,\beta) \in \Theta_1 \times \Theta_2,\; t,s > 0,\; \|X_{\alpha,\beta}-R_k\| \leq d,\; X_{\alpha,\beta} \in D_i \right\}C={Xα,β​:(α,β)∈Θ1​×Θ2​,t,s>0,∥Xα,β​−Rk​∥≤d,Xα,β​∈Di​}
  2. 一致性筛选:

    引入第三台机器人 R3R_3R3​。对每个 X∈CX \in \mathcal{C}X∈C,计算其相对于 R3R_3R3​ 的方位角:

    ϕ3(X)=atan2⁡(X−R3)\phi_3(X) = \operatorname{atan2}(X - R_3)ϕ3​(X)=atan2(X−R3​)

    仅保留满足 ϕ3(X)∈Θ3\phi_3(X) \in \Theta_3ϕ3​(X)∈Θ3​ 的点,记筛选后集合为 C′⊆C\mathcal{C}' \subseteq \mathcal{C}C′⊆C。

    对 C′\mathcal{C}'C′ 同上利用其余机器人 R4,…,RmiR_4, \ldots, R_{m_i}R4​,…,Rmi​​ 进行筛选,最终得到通过筛选的候选点集合 Pi∗\mathcal{P}_i^*Pi∗​。

  3. 唯一性输出:

    由引理知,Pi∗\mathcal{P}_i^*Pi∗​ 恰好唯一地对应真实猎人集合。因此直接输出:

    Pi=Pi∗\mathcal{P}_i = \mathcal{P}_i^*Pi​=Pi∗​

区域划分

不妨假设森林边界为矩形 [0,L]×[0,W][0,L]\times[0,W][0,L]×[0,W],采用正方形网格,边长为 2d\sqrt{2} d2​d,则子区域数量为:

s=⌈L2d⌉×⌈W2d⌉=O(LWd2)s = \left\lceil \frac{L}{\sqrt{2}d} \right\rceil \times \left\lceil \frac{W}{\sqrt{2}d} \right\rceil = O\left(\frac{LW}{d^2}\right)s=⌈2​dL​⌉×⌈2​dW​⌉=O(d2LW​)

更一般地,最优划分方式为正六边形划分( 参见 Kershner, 1939 ),此处为便于计算简化考虑。

复杂度

  • 分块:O(s)O(s)O(s)
  • 探测上界:O(s⋅nmax⁡)O(s \cdot n_{\max})O(s⋅nmax​)
  • 精确定位:O(∑i=1smini2)\displaystyle O\left(\sum_{i=1}^{s} m_i n_i^2\right)O(i=1∑s​mi​ni2​)

由引理,精确定位阶段对每个子区域 DiD_iDi​ 部署的观测机器人数量为:

mi=2ni+1m_i = 2n_i + 1mi​=2ni​+1

其中 nin_ini​ 为该区域猎人数上界。因此:

∑i=1smini2=∑i=1s(2ni+1)ni2=O(∑i=1sni3)\sum_{i=1}^{s} m_i n_i^2 = \sum_{i=1}^{s} (2n_i + 1) n_i^2 = O\left(\sum_{i=1}^{s} n_i^3\right)i=1∑s​mi​ni2​=i=1∑s​(2ni​+1)ni2​=O(i=1∑s​ni3​)

设森林中猎人总数为 NNN。由 Hölder 不等式:

∑i=1sni3≤(max⁡ini)2⋅∑i=1sni=nmax⁡2N\sum_{i=1}^{s} n_i^3 \leq \left(\max_i n_i\right)^2 \cdot \sum_{i=1}^{s} n_i = n_{\max}^2 Ni=1∑s​ni3​≤(imax​ni​)2⋅i=1∑s​ni​=nmax2​N

故整体时间复杂度为:

O(LWd2⋅nmax⁡+nmax⁡2N)O\left(\frac{LW}{d^2} \cdot n_{\max} + n_{\max}^2 N\right)O(d2LW​⋅nmax​+nmax2​N)

总消耗为:

2s=O(LWd2)2s = O\left(\frac{LW}{d^2}\right)2s=O(d2LW​)

参考文献

Kershner, R. (1939). The Number of Circles Covering a Set. American Journal of Mathematics, 61(3), 665–671.

目录
  • 题 3.1
  • 题 3.2
  • 题 3.3
  • 题 3.4
  • 题 3.5
    • 引理
    • 整体算法
    • 精确定位算法
    • 区域划分
    • 复杂度
    • 参考文献
© 2026 miniyuan. All rights reserved.
Go to miniyuan's GitHub repo