2012-09-27 2 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 } 

또는

A는 NX3 행렬이다
Ac = z 

, C는 3 × 1 벡터이고, Z는 3XN 벡터이다.

양변을 A의 전치로 미리 곱하면, 원하는 계수에 대해 풀 수있는 3x3 행렬의 방정식을 갖게됩니다.

LU 분해 및 전달 대체를 사용하십시오.

+0

이걸 사용할 수 있습니까? A = np.column_stack ([x, y, np.ones_like (x)]) – plebplod

+0

충분히 잘 모르겠다. – duffymo

+0

비트는 행렬에 익숙하지 않지만 ... = (XtX)^- 1Xty – plebplod