【问题标题】:Fit a 3D line to 3D point data in Java?将 3D 线拟合到 Java 中的 3D 点数据?
【发布时间】:2011-01-22 01:48:33
【问题描述】:

我花了相当多的时间试图寻找一种简单的方法来做到这一点 - 理想情况下,一个神奇的库存在于某个地方,它将获取我的一组 3D 数据点并在最佳拟合线上返回 2 个点使用正交回归或最小二乘法,并返回拟合线的误差。这样的事情是否存在,如果存在,在哪里?

【问题讨论】:

    标签: java math 3d data-fitting


    【解决方案1】:

    这很容易做到,但要自己编写,您需要一个特征值求解器或奇异值分解。将 (x-xbar, y-ybar, z-zbar) 数据的 nx3 矩阵 A 创建为列。保存这些列意味着以后,我将其称为 V0 = [xbar,ybar,zbar]。

    现在,计算 A'*A 的特征值和特征向量,即 A 转置乘以 A 形成的 3x3 矩阵。

    如果此数据位于 R^3 中的一条线上,则其中一个特征值将明显大于其他两个特征值。如果这不是真的,那么正交回归线将不会被很好地估计。

    取与 A'*A 的最大特征值相关联的特征向量。那么如果V是对应的特征向量,则正交回归线定义为

    V(t) = V0 + t*V

    该线上的任何点都可以由参数 t 的某个值给出。

    或者,计算A的奇异值分解,并取A的最大奇异值对应的右奇异向量。

    在任何一种情况下,如果您希望计算数据点的误差,这将被简单地定义为与相关直线的正交距离。

    【讨论】:

    【解决方案2】:

    Google 搜索“java 线性最小二乘回归库”,您应该会找到一些选项。一个是Drej。不过我自己没用过。

    编辑 - 我不确定这是否能回答问题 - 我不知道是否支持 3D 数据。

    【讨论】:

      【解决方案3】:

      如果你知道诀窍,这很容易做到:http://www.scribd.com/doc/21983425/Least-Squares-Fit

      更多的维度意味着更多的系数,但它们很容易添加。想法都是一样的。

      【讨论】:

      • 错了。重要的是 codimension,当你有一条 3D 线时,codimension 是 2(对于 2D 线,它是 1)。因此,恐怕所有通常用于推导最小二乘拟合的逻辑(如您的链接中所示)都完全失效了。请参阅下面的木片答案。
      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2021-03-02
      • 2015-06-04
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多