多変数求根 (N-D Root Finding)

概要

連立非線形方程式 $\mathbf{F}(\mathbf{x}) = \mathbf{0}$ ($\mathbf{F}: \mathbb{R}^n \to \mathbb{R}^n$) の解を求める問題。 1 次元の Newton/secant を直接一般化した手法群と、大域収束を狙うホモトピー法に大別される。

関連 API: newton_raphson_system, broyden_method

多変数 Newton 法

$\mathbf{F}$ を $\mathbf{x}_k$ の周りで 1 次 Taylor 展開:

$$\mathbf{F}(\mathbf{x}_k + \Delta) \approx \mathbf{F}(\mathbf{x}_k) + J(\mathbf{x}_k) \Delta$$

これを $\mathbf{0}$ にする $\Delta$ で更新:

$$\mathbf{x}_{k+1} = \mathbf{x}_k - J(\mathbf{x}_k)^{-1} \mathbf{F}(\mathbf{x}_k)$$

$J(\mathbf{x}) = \partial \mathbf{F}/\partial \mathbf{x}$ はJacobian 行列 ($n \times n$):

$$J_{ij}(\mathbf{x}) = \frac{\partial F_i}{\partial x_j}(\mathbf{x})$$

収束

1 次元と同じく、単純零点 (Jacobian が正則) かつ滑らかな $\mathbf{F}$ なら二次収束:

$$\|\mathbf{x}_{k+1} - \boldsymbol{\alpha}\| \leq C \|\mathbf{x}_k - \boldsymbol{\alpha}\|^2$$

収束半径外から出発すると発散することがあり、line search やホモトピーで補強する。

sangi の newton_raphson_system(F, J, x0) はユーザーから $\mathbf{F}$ と $J$ をコールバックで受け取る。 Jacobian が解析形で得られない場合は数値微分 (中心差分) で代替できる。

関連記事: 多変数 Newton 法

線形系の解法 (LU vs QR)

$\Delta = -J^{-1} \mathbf{F}$ を計算するとき、$J^{-1}$ を陽に作るのは数値的に不安定。 代わりに線形系 $J \Delta = -\mathbf{F}$ を解く。

LU 分解

$J = L U$ に分解後、前進代入と後退代入で $\Delta$ を得る。$O(n^3)$ の分解 + $O(n^2)$ の代入。 Jacobian が良条件 (条件数が小さい) なら最速。sangi の newton_raphson_system はデフォルトで部分ピボット付き LU を使う。

QR 分解

$J = QR$ に分解 ($Q$ は直交、$R$ は上三角)。LU より計算量が約 2 倍だが、条件数が大きい (Jacobian が特異に近い) ときに数値的安定性が高い。 Newton 反復の終盤で Jacobian が退化し始める場合は QR が安全。

反復解法

$n$ が大きく $J$ がスパースな場合は、GMRES や BiCGSTAB といった Krylov 部分空間反復法で $J \Delta = -\mathbf{F}$ を解く (Newton-Krylov 法)。 Jacobian を陽に作らず、行列ベクトル積 $J \mathbf{v}$ だけで動くため、メモリ・計算量とも節約できる。

Broyden 準 Newton 法

Jacobian を毎反復で計算する Newton 法は、$\mathbf{F}$ が複雑だと評価コストが支配的になる。 Broyden 法 (1965) はJacobian を近似行列 $B_k$ で置き換え、各反復で rank-1 更新する:

$$B_{k+1} = B_k + \frac{(\mathbf{y}_k - B_k \mathbf{s}_k) \mathbf{s}_k^\top}{\mathbf{s}_k^\top \mathbf{s}_k}$$

ここで $\mathbf{s}_k = \mathbf{x}_{k+1} - \mathbf{x}_k$, $\mathbf{y}_k = \mathbf{F}(\mathbf{x}_{k+1}) - \mathbf{F}(\mathbf{x}_k)$。 これは「secant 条件」 $B_{k+1} \mathbf{s}_k = \mathbf{y}_k$ を満たす最小修正である。

収束

収束次数: 超線形 ($\approx 1.62$)

Newton の 2 次より遅いが、Jacobian の評価が不要。 Jacobian 評価コストが $\mathbf{F}$ の数倍以上の場合、総コストで Newton に勝つことが多い。

初期値 $B_0$ は単位行列、または有限差分による 1 回だけの Jacobian 推定を使う。

関連記事: Broyden 法

Sherman-Morrison による逆行列更新

Broyden の rank-1 更新は逆行列も $O(n^2)$ で更新できる。 Sherman-Morrison の式:

$$(A + \mathbf{u} \mathbf{v}^\top)^{-1} = A^{-1} - \frac{A^{-1} \mathbf{u} \mathbf{v}^\top A^{-1}}{1 + \mathbf{v}^\top A^{-1} \mathbf{u}}$$

これを使えば $B_{k+1}^{-1}$ を $B_k^{-1}$ から $O(n^2)$ で得られる。 Newton の毎反復 $O(n^3)$ LU 分解と比較して、$n$ が大きいときに大きな速度差が出る。

注意点: Sherman-Morrison は数値的に LU/QR より不安定なので、何度も rank-1 更新を重ねると条件数が悪化する。 sangi の broyden_method は周期的に Jacobian を再計算する (リスタート) 戦略を採用できる。

ホモトピー法 (大域収束)

line search でも収束しない悪条件 (深い極小値が複数ある) では、ホモトピー法 (continuation method) を使う。

アイデア

パラメータ $t \in [0, 1]$ で簡単な系から目標系へ連続的につなぐ:

$$H(\mathbf{x}, t) = (1 - t) G(\mathbf{x}) + t \mathbf{F}(\mathbf{x})$$

$G$ は解が既知の簡単な系 (例: $G(\mathbf{x}) = \mathbf{x} - \mathbf{x}_0$ なら解は $\mathbf{x}_0$)。 $t$ を $0 \to 1$ と少しずつ動かしながら、各 $t$ での解を予測子-修正子 (predictor-corrector) で追跡する:

  1. 予測子: $\partial H/\partial t$ から接線方向の Euler ステップで次の $t$ での近似解を予測
  2. 修正子: その近似解から固定 $t$ で Newton 反復し、$H(\mathbf{x}, t) = \mathbf{0}$ を解く

$t = 1$ に到達すれば目標系の解。 多項式系の全実解列挙では Bertini や HomotopyContinuation.jl のような実装で標準的に使われる。

sangi は現状ホモトピー法を公式 API として提供していないが、多変数 Newton を呼び出す上位ラッパーとして実装可能。

収束半径と初期値選択

多変数 Newton/Broyden は局所収束のみ保証され、収束半径の外から出発すると発散する。 Kantorovich の定理は収束半径の十分条件を与える: 初期点 $\mathbf{x}_0$ で

$$\|J(\mathbf{x}_0)^{-1}\| \cdot \|\mathbf{F}(\mathbf{x}_0)\| \cdot L \leq \frac{1}{2}$$

($L$ は Jacobian の Lipschitz 定数) なら Newton が二次収束する解が $\mathbf{x}_0$ の近傍に存在する。 実用上は次のような戦略を組み合わせる:

  • 物理的・問題ドメインの知識: 解の存在範囲が事前に分かっているなら、その中心を $\mathbf{x}_0$ にする
  • 連続化: 関連する easy な問題から徐々にパラメータを動かしていく (ホモトピーの簡単版)
  • line search / trust region: 発散を抑え、徐々に収束領域に近づける
  • multistart: 複数の初期値から並列に走らせ、収束したものを採用

初期値が良ければ Newton の 2 次収束は 5〜10 反復で機械精度に達する。 反復が 50 回を超えても収束しない場合は、初期値またはアルゴリズム選択を疑うべき。

設計判断

Newton と Broyden を別関数として公開する理由

多変数求根の使い分けは、Jacobian の評価コストに強く依存する:

  • Jacobian が解析的に書ける + 評価コストが $\mathbf{F}$ の数倍以内 → Newton (2 次収束で速い)
  • Jacobian が複雑または不明 → Broyden (Jacobian 不要)

sangi は両者を newton_raphson_systembroyden_method として独立に公開し、ユーザーが問題の特性で選べるようにしている。 将来的に Newton-Krylov や trust region を追加する場合も同じ命名規約で並べる予定。

1D Newton との一貫性

1D Newton (newton_raphson) と多変数 Newton (newton_raphson_system) は同じ概念の異なる次元への一般化。 sangi は両者でほぼ同じ API 形式 (関数 + 導関数/Jacobian + 初期値) を採用し、コード移行のコストを最小化している。

参考文献

  • Ortega, J. M. and Rheinboldt, W. C. (1970). Iterative Solution of Nonlinear Equations in Several Variables. Academic Press.
  • Broyden, C. G. (1965). "A class of methods for solving nonlinear simultaneous equations". Mathematics of Computation, 19(92), 577–593.
  • Allgower, E. L. and Georg, K. (2003). Introduction to Numerical Continuation Methods. SIAM.
  • Dennis, J. E. and Schnabel, R. B. (1996). Numerical Methods for Unconstrained Optimization and Nonlinear Equations. SIAM.