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

Python 用numpy最小二乘法拟合线性曲面,python,numpy,least-squares,geometry-surface,Python,Numpy,Least Squares,Geometry Surface,所以我想解方程z=a+b*y+c*x,。获取a、b、c。 ie:使(平面)曲面适合3D空间中的大量分散点 但我似乎什么也找不到!我以为会有一个简单的模块来解决这样一个简单的问题 我试过了,其中x,y,z是数组 ys=zip(x,y) (coeffs, residuals, rank, sing_vals) = np.linalg.lstsq(ys,z) 我认为系数=b,c对吗? 还是我完全走错了方向。我似乎找不到任何其他能在3d中工作的东西…常数a、b和c是需要求解的未知数 如果你将N(x,y

所以我想解方程
z=a+b*y+c*x
,。获取
a、b、c
。 ie:使(平面)曲面适合3D空间中的大量分散点

但我似乎什么也找不到!我以为会有一个简单的模块来解决这样一个简单的问题

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

ys=zip(x,y)
(coeffs, residuals, rank, sing_vals) = np.linalg.lstsq(ys,z)
我认为系数=b,c对吗?
还是我完全走错了方向。我似乎找不到任何其他能在3d中工作的东西…

常数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 }

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

如果你用A的转置对两边进行预乘,你会得到一个3x3矩阵的方程,你可以解出你想要的系数


使用LU分解和前向-后向替换。

我认为您的思路是正确的。您仍然可以尝试遵循的例子,特别是解决最小二乘…`节

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

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

我可以使用这个吗?A=np。列_堆栈([x,y,np.像(x)])对scipy不太了解,不太熟悉矩阵。。。但将尝试a=(XtX)^-1Xty
A = np.column_stack((np.ones(x.size), x, y))
c, resid,rank,sigma = np.linalg.lstsq(A,zi)