この質問は「C++ の数値レシピ」本に関連しているため、多次元最適化と同様にそれについて少し知っている人に予約されます。
多次元ルートを検索する必要があるプログラムを書いています。それを解決するために、多次元ニュートン ルート検索法、つまり「newt」手順を使用しています。
詳細に興味のある方のために、いくつかの特徴点 (2 つのカメラで見られる特徴点) に基づいて、オブジェクトの立体視ビューに変形可能な 3D モデルを適合させようとしています。
このために、次のように newt プロシージャを使用しています。
- 11 個の入力パラメーター:私の変形可能モデルは、11 個のパラメーター (5 つの幾何学的パラメーターと 3D オブジェクトの位置に対する 6 つの自由度で構成) でモデル化できます。
- ルートを見つける必要がある14 の出力パラメーター: カメラによって識別された特徴点に基づいて、「入力パラメーター」のセットが与えられると、カメラで見た特徴点とその特徴点の間の距離のセットを計算できます。理論上の位置。これらのポイントが 7 つあるため、14 個のパラメーターが得られます (両方のカメラで距離を計算するため、距離 7 かける 2)。
私の問題は、入力パラメーター (11) よりも多くの出力パラメーター (14) があることです。「newt」を呼び出すたびに、アルゴリズムは常に収束しますが、最初の 11 個の出力パラメーターをほぼ完全に最小化するソリューションが見つかりますが、残りの 3 つのパラメーターに多くのエラーがあります。
ただし、エラーを出力パラメーター間で均一に分割したいと考えています。
私はすでに以下に説明するアプローチを試しました:
- 14 個の出力パラメーターを 11 個のパラメーターに結合してみてください (たとえば、両方の距離を使用する代わりに、いくつかの距離の平均をとります)。しかし、私はこのアプローチに 100% 満足しているわけではありません
- 次の原則に従って、いくつかのソリューションを組み合わせます。
- mnewt を呼び出し、見つかったルートを記憶する
- 14 個の出力パラメータの順序を変更します
- mnewt を再度呼び出して、見つかったルートを記憶する
- 解を計算すると、見つかった 2 つの根の平均になります
ルート検索アルゴリズムが、最初のパラメーターを優先するのではなく、出力パラメーター間で均一に分割されるエラーを優先する、より一般的なアプローチを知っている人はいますか?