用numpy最小二乘法拟合线性曲面

时间:2012-09-27 09:16:44

标签: python numpy least-squares geometry-surface

所以我想解决等式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中工作的东西......

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

常数a,b和c是您需要解决的未知数。

如果将N(x,y,z)点替换为等式,则将有3个未知数的N个等式。你可以把它写成矩阵:

[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分解和前后替换。