3

所以我想解方程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 中使用的东西......

4

2 回答 2

2

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

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

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

于 2012-09-27T10:09:04.273 回答
0

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

于 2012-09-27T09:23:37.993 回答