Add multivariate root finding (Newton and Cuyt's Halley)

クローズ
#1,616 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@NAThompson がすでに取り組んでいます。

2026年11月2日 から。

  • #1620 @NAThompson による — オープン

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
12/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
cpp
領域
tooling

調査の方向性

Start from the scalar solvers in tools/roots.hpp (Newton, Halley, Schröder) to see the existing iteration and convergence conventions, then check autodiff.hpp for how forward-mode derivatives are exposed. Design the multivariate Newton step J(x)a = −F(x) and the Cuyt–Halley update first, since the globalization choice and the fallback near aᵢ + bᵢ/2 ≈ 0 are open questions. Done means a documented API with tests on known systems that converge to the expected roots and show cubic convergence for the Halley variant.

索引モデルが issue の本文から書いたものです。

説明

tools/roots.hpp has Newton, Halley and Schröder for scalar equations, but there is no solver for a system F(x) = 0 with x in ℝⁿ.

Proposal:

  • Multivariate Newton: solve J(x) a = −F(x), with a line search or trust region for globalization.
  • Multivariate Halley via Cuyt's Padé approach (Cuyt & Van der Cruyssen 1983; Cuyt, ACM TOMS 1985): with a = −J⁻¹F and b = J⁻¹F″[a, a], update componentwise xᵢ ← xᵢ + aᵢ² / (aᵢ + bᵢ/2). It converges cubically, reuses one factorization of J for both solves, and needs only the directional second derivative F″[a, a], not the full tensor. Fall back to the Newton component where aᵢ + bᵢ/2 ≈ 0.
  • Derivatives from a user-supplied Jacobian, or from autodiff (forward-mode autodiff.hpp handles F″[a, a] directly).

Uses include equilibria, collocation, closest points on implicit curves and surfaces, and ray–surface intersection in rendering.

主要言語
C++
スター
378
フォーク
271
平均マージ
12時間 37分
マージ済み PR(30日)
66

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

boostorg/math のほかの issue

boostorg/math の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。