2017-12-12 2 views
1

의 과잉 결정 시스템을 푼다난 형태의 방정식 비교적 간단한 시스템이 선형 방정식

1*A + 0*B + x2*C + y2*D = x1 
0*A + 1*B + y2*C + x2*D = y1 

여기서 쌍 (x1,y1) 길이 N(x2,y2) 공지되어 플로트 (시스템이 결정 과잉 임) , A, B, C, D 매개 변수를 해결해야합니다.

나는 numpy.linalg.lstsq으로 놀고 있었지만 매트릭스의 모양을 제대로 파악할 수없는 것 같습니다. 내가 잘못

numpy.linalg.linalg.LinAlgError: 3-dimensional array given. Array must be two-dimensional 

를하고있는 중이 야 무엇 : 이것은 내가 실패하는

import numpy as np 

N = 10000 
x1, y1 = np.random.uniform(0., 5000., (2, N)) 
x2, y2 = np.random.uniform(0., 5000., (2, N)) 

# 1*A + 0*B + x2*C + y2*D = x1 
# 0*A + 1*B + y2*C + x2*D = y1 

l1 = np.array([np.ones(N), np.zeros(N), x2, y2]) 
l2 = np.array([np.zeros(N), np.ones(N), y2, x2]) 

M1 = np.array([l1, l2]) 
M2 = np.array([x1, y1]) 

ABCD = np.linalg.lstsq(M1, M2)[0] 
print(ABCD) 

이 무엇인가?

답변

2

은 다른 모든 일을해야

M1 = np.vstack([l1.T, l2.T]) 
M2 = np.concatenate([x1, y1]) 

M1M2을 변경, 고정 유지.

+0

니스! 모든 열을 연결하는 방법에 대해 생각했지만 훨씬 더 짧습니다. :-) – Omni

+0

실제로 작동합니다. 고맙습니다! – Gabriel

0

연결이 문제이며 lstsq()의 매개 변수를 바꾸어야합니다.

M1 = np.hstack((l1,l2)) 
M2 = np.hstack((x1,x2)) 
ABCD = np.linalg.lstsq(M1.T,M2.T)[0]