所以我想要解方程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中工作的东西...
发布于 2012-09-27 10:09:04
我认为你在正确的轨道上。您仍然可以尝试遵循scipy.linalg
documentation的示例,特别是求解最小二乘部分...
A = np.column_stack((np.ones(x.size), x, y))
c, resid,rank,sigma = np.linalg.lstsq(A,zi)
(我们为常量添加了一列1)。
发布于 2012-09-27 09:23:38
常数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分解和前向后向替换。
https://stackoverflow.com/questions/12617985
复制