浮動小数点の x 座標と y 座標 (および次元に応じた追加のコンポーネント) を指定してサーフェスの標高を評価する関数があるとします。
double ComputeElevation(double x, double y, ...., double z) { }
これは分析関数ではないため、導関数を計算することはできません。私がする必要があるのは、任意の {x, y} ペアに対してサーフェスが最も急勾配である方向を見つけることです。1 回の評価は非常にコストがかかる可能性があります (最悪の場合、数秒または数分と考えてください)。
2D の場合の私の典型的なアプローチは、{x, y} に隣接する N 個の位置でサーフェスをサンプリングし、それらのサンプルに曲線を当てはめ、最高点の曲線を検索することです。この検索は高価な評価の影響を受けないためです。
上の画像では、P0 が指定された座標です。{S0、S1、S2、S3} は、P0 の周囲にランダムに配置された 4 つのサンプルであり、PM は曲線の最高点です。したがって、ベクトル PM-P0 は、最も急な上昇の方向です。
しかし、これを N 次元にスケールアップする方法や、これを行うためのよりスマートなアルゴリズムがあるかどうかはわかりません。
次元の数は潜在的に非常に大きい (数十から数百) ため、最終的に使用する方法は、次元よりもサンプルが少ない場合に機能する必要があります。私は正確な答えを探しているわけではありません。それは不可能ですが、中途半端な近似がすでに大歓迎です。
ps。私はこれを C# で行っていますが、それほど重要ではありませんが、C# 以外の言語機能にはアクセスできません。