想象一下,有一个函数可以在给定浮点 x 和 y 坐标(以及根据维度的附加组件)的情况下评估表面的高程:
double ComputeElevation(double x, double y, ...., double z) { }
这不是解析函数,因此无法计算导数。我需要做的是找到任何给定 {x, y} 对的表面最陡的方向。一次评估可能非常昂贵(在最坏的情况下考虑几秒钟甚至几分钟)。
我在 2D 情况下的典型方法是在与 {x, y} 相邻的 N 个位置对表面进行采样,然后通过这些样本拟合曲线并搜索曲线的最高点,因为这种搜索不会受到昂贵的评估的影响:
在上图中,P0 是给定的坐标。{S0, S1, S2, S3} 是 P0 周围随机放置的 4 个样本,PM 是曲线上的最高点。因此,向量 PM-P0 是最陡上升的方向。
但我不知道如何将其扩展到 N 维,或者是否有更智能的算法可以做到这一点。
维度的数量可能非常大(几十到几百),所以当样本少于维度时,我最终使用的任何方法都必须有效。我不是在寻找确切的答案,那是不可能的,但是一个中途的近似值已经很受欢迎了。
附言。我在 C# 中执行此操作,这并不重要,但我无法访问非 C# 语言功能。