解下面这个方程。

$$ F(x,y,s) := \begin{bmatrix} Ax-b\\ A^Ty + s - c\\ XSe-\mu e \end{bmatrix} = \mathbf{0} $$

其中 $A, b, c,\mu$ 是参数,$e$ 是常量,$x, y, s, X, S$ 是变量。

它们的定义如下。

$$ \begin{aligned} & A\in\mathbb{R}^{m\times n}, ~b\in\mathbb{R}^m, ~c\in\mathbb{R}^n,~ \mu > 0, ~ \mu \in \mathbb{R}^n, n\geq m \\[6pt] & e = [1, 1, ..., 1]^T \in \mathbb{R}^n, \\[6pt] & x, s\in \mathbb{R}^n, ~ y\in\mathbb{R}^m, \\[6pt] & X = \begin{bmatrix} x_1 & 0 & \cdots & 0 \\ 0 & x_2& \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & x_n \end{bmatrix}, ~ S = \begin{bmatrix} s_1 & 0 & \cdots & 0 \\ 0 & s_2& \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & s_n \end{bmatrix} \end{aligned} $$

此外,$A$ 的秩为 $m$。

思路

简单介绍一下用牛顿法解方程的思路。已知方程 $f(x) = 0$ 且 $f(x)$ 连续可导。

用 $f(x)$ 在点 $x^k$ 的一阶泰勒展式去近似它。

$$ f(x) \approx f(x^k) + f'(x^k)(x-x^k) $$

那么

$$ f(x^{k+1}) \approx f(x^k) + f'(x^k)(x^{k+1} -x^k) $$

根据方程 $f(x) = 0$,我们有

$$ f(x^k) + f'(x^k)(x^{k+1} -x^k) = 0 $$

因此

$$ x^{k+1} = x^k - \frac{f(x^k)}{f'(x^k)} $$

根据 $x^k$ 计算 $x^{k+1}$,这就是迭代公式。

从第 $x^0$ 开始,得到 $x^1, x^2, …$,持续迭代下去,直到$|f(x^{k}) - f(x^{k-1})| \rightarrow 0$ 时停止。

迭代

考虑方程 $F(x, y, s) = \mathbf{0}$。已知 $x^k, y^k, s^k$,要计算 $x^{k+1}, y^{k+1}, s^{k+1}$。

回顾上面的思路。牛顿法需要计算方程的一阶导数。由于 $F$ 是一个向量函数。这种情况下,它在 $x^k, y^k, s^k$ 的一阶导数就是 $F$ 的雅可比矩阵 $J$。

$$ J(x^k,y^k,s^k) = \begin{bmatrix} \frac{\partial F_1}{\partial x} & \frac{\partial F_1}{\partial y} & \frac{\partial F_1}{\partial s}\\[6pt] \frac{\partial F_2}{\partial x} & \frac{\partial F_2}{\partial y} & \frac{\partial F_2}{\partial s}\\[6pt] \frac{\partial F_3}{\partial x} & \frac{\partial F_3}{\partial y} & \frac{\partial F_3}{\partial s} \end{bmatrix} = \begin{bmatrix} A & 0 & 0 \\ 0 & A^T & I \\ A & 0 & 0 \\ S^k & 0 & X^k \end{bmatrix} $$

其中 $F_1, F_2, F_3$ 分别代表函数值的第 $1, 2, 3$ 个分量

$$ \begin{aligned} & X^k = \begin{bmatrix} x_1^k & 0 & \cdots & 0 \\ 0 & x_2^k & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & x_n^k \end{bmatrix}, ~ S^k = \begin{bmatrix} s_1^k & 0 & \cdots & 0 \\ 0 & s_2 ^k& \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & s_n ^k \end{bmatrix} \end{aligned} $$

根据下面的线性方程组来计算 $x^{k+1}, y^{k+1}, s^{k+1}$。

$$ J(x^k,y^k,s^k)\begin{bmatrix} x^{k+1} -x^k\\ y^{k+1} - y^k\\ s^{k+1} - s^k \end{bmatrix} + F(x,y,s) = 0 $$

引入记号(称为牛顿方向

$$ \begin{aligned} & \Delta x^k := x^{k+1} - x^k \\ & \Delta y^k := y^{k+1} - y^k \\ & \Delta s^k := s^{k+1} - s^k \\ \end{aligned} $$

上面的方程可以写成

$$ \begin{bmatrix} A & 0 & 0 \\ 0 & A^T & I \\ S^k & 0 & X^k \end{bmatrix}\begin{bmatrix} \Delta x^k\\ \Delta y^k\\ \Delta s^k \end{bmatrix} = -\begin{bmatrix} Ax^k-b\\ A^Ty^k + s^k - c\\ X^kS^ke-\mu e \end{bmatrix} $$

由于 $x^k, y^k$ 是可行解,上式可以写成

$$ \begin{bmatrix} A & 0 & 0 \\ 0 & A^T & I \\ S^k & 0 & X^k \end{bmatrix}\begin{bmatrix} \Delta x^k\\ \Delta y^k\\ \Delta s^k \end{bmatrix} = -\begin{bmatrix} 0\\ 0\\ X^kS^ke-\mu e \end{bmatrix} $$

解出 $x^k, y^k, s^k$,我们就得到

$$ \begin{aligned} & x^{k+1} = x^k + \Delta x^k\\ & y^{k+1} = y^k + \Delta y^k\\ & s^{k+1} = s^k + \Delta s^k\\ \end{aligned} $$

计算 $x^k, y^k, s^k$ 从 $k=0, 1, 2, …$ 直到满足停止条件。

$$ \left|F(x^k, y^k, s^k) - F(x^{k-1}, y^{k-1}, s^{k-1})\right | < \epsilon $$

其中 $\epsilon > 0$ 是一个很小的常数。

Last updated 04 Jul 2025, 08:25 +0800 . history