暂时没有矩阵方程需要提供。您选择的E表现不佳;它的偏导数甚至不连续,更别说是线性的了。即使有了不同的目标,这个优化问题似乎基本上是非凸的;对于一个点P和一个非零半径r,最优解集合是以P为球心的球体。
您可能应该在更具有优化知识的交流平台上重新提问。
没有循环很难做到这一点。
我会按照以下步骤进行:
通过对所有点的(X,Y,Z)坐标求平均值找到整体中心点
通过该结果找到距离中心点的平均距离Ravg,决定是否继续操作
从距离步骤2中找到的Ravg太远的点中删除点
返回步骤1(再次平均点,得到更好的中心点)
当然,这将需要一些关于(2)和(4)的条件,这取决于您点云的质量!
Ian Coope提出了一种有趣的算法,他使用变量的改变来线性化问题。拟合非常强健,虽然它略微重新定义了最优条件,但我发现它通常在处理嘈杂数据时视觉效果更好。
Coope的论文预印本可在此处获得:https://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf。
我发现这个算法非常有用,所以我在scikit-guess中实现了skg.nsphere_fit
。假设您有一个(m, n)
数组p
,由N维(这里N=3)的M个点组成:
r, c = skg.nsphere_fit(p)
半径r
是一个标量,c
是包含中心的n
向量。
sum [i = 0..n](| P_i- C | ^ 2 - r ^ 2)^ 2
这样的东西,这样你的导数就能够适当地处理。而且,因为你的问题在任何情况下都是非线性的,所以你可能被迫使用某种形式的迭代。 - comingstorm