【问题标题】:fitting a linear surface with numpy least squares用 numpy 最小二乘拟合线性曲面
【发布时间】:2012-09-27 09:16:44
【问题描述】:

所以我想解方程z= a + b*y +c*x,。得到a,b,c。 即:使(平面)表面适合 3D 空间中的散点负载。

但我似乎找不到任何东西!我认为对于这样一个简单的问题会有一个简单的模块。

我试过了,其中 x,y,z 是数组;

ys=zip(x,y)
(coeffs, residuals, rank, sing_vals) = np.linalg.lstsq(ys,z)

我认为 coeffs = b,c 是否正确? 还是我完全走错了方向。我似乎找不到任何其他可以在 3d 中工作的东西......

【问题讨论】:

    标签: python numpy least-squares geometry-surface


    【解决方案1】:

    我认为你在正确的轨道上。您仍然可以尝试遵循scipy.linalg documentation 的示例,尤其是求解最小二乘...` 部分

    A = np.column_stack((np.ones(x.size), x, y))
    c, resid,rank,sigma = np.linalg.lstsq(A,zi)
    

    (我们为常数添加了一列 1)。

    【讨论】:

      【解决方案2】:

      常数 a、b 和 c 是您需要求解的未知数。

      如果您将 N (x, y, z) 点代入方程式,您将有 N 个方程式代表 3 个未知数。你可以把它写成一个矩阵:

      [x1 y1 1]{ a }   { z1 }
      [x2 y2 1]{ b }   { z2 }
      [x3 y3 1]{ c } = { z3 }
          ...
      [xn yn 1]        { zn }
      

      或者

      Ac = z
      

      其中 A 是 Nx3 矩阵,c 是 3x1 向量,z 是 3xN 向量。

      如果您将两边都预乘以 A 的转置,您将得到一个具有 3x3 矩阵的方程,您可以求解所需的系数。

      使用 LU 分解和前后替换。

      【讨论】:

      • 我可以用这个吗? A = np.column_stack([x, y, np.ones_like(x)])
      • 对 scipy 不太了解。
      • 对矩阵有点不熟悉...但会尝试 a=(XtX)^-1Xty
      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2012-07-14
      相关资源
      最近更新 更多