2012-09-27 74 views
3

所以我想解決方程z= a + b*y +c*x,。得到a,b,c。 即:使(平面)表面適合3D空間中散射點的負載。用numpy最小二乘擬合線性表面

但我似乎無法找到任何東西!我認爲對於這樣一個簡單的問題會有一個簡單的模塊。

我試過了,其中x,y,z是數組;

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

我是正確的思維coeffs = B,C? 還是我完全走錯了方向。我似乎無法找到其他任何能在3d中工作的東西...

回答

2

我認爲你是在正確的軌道上。你仍然可以嘗試以下的scipy.linalg documentation的例子,尤其是解最小二乘...`部分

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

(我們增加了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是3×1向量,z是一個3×N個向量。

如果通過A的轉置預乘雙方,您將得到一個3x3矩陣的等式,您可以爲您想要的係數求解。

使用LU分解和前向替換。

+0

我可以用這個嗎? A = np.column_stack([x,y,np.ones_like(x)]) – plebplod

+0

不知道scipy還不夠好。 – duffymo

+0

有點不熟悉矩陣......但會嘗試a =(XtX)^ - 1Xty – plebplod

相關問題