Home:ALL Converter>Get solution to overdetermined linear homogeneous system numpy

Get solution to overdetermined linear homogeneous system numpy

Ask Time:2016-11-06T23:56:16         Author:sevolo

Json Formatter

I'm trying to find the solution to overdetermined linear homogeneous system (Ax = 0) using numpy in order to get the least linear squares solution for a linear regression.

This is the code I am using to generate the linear regression:

N = 100
x_data = np.linspace(0, N-1, N)
m = +5
n = -5
y_model = m*x_data + n
y_noise = y_model + np.random.normal(0, +5, N)

I want to recover m and n from y_noise. In other words, I want to resolve the homogeneous system (Ax = 0) where "x = (m, n)" and "A = (x_data | 1 | -y_noise)". So I convert non-homogeneous (Ax = y) into homogeneous (Ax = 0) using this code:

A = np.array(np.vstack((x_data, np.ones(N), -y_noise)).T)

I know I could resolve non-homogeneous system using np.linalg.lstsq((x_data | 1), y_noise)) but I want to get the solution for homogeneous system. I am finding a problem with this function as it only returns the trivial solution (x = 0):

x = np.linalg.lstsq(A, np.zeros(N))[0] => array([ 0.,  0.,  0.])

I was thinking about using eigenvectors to get the solution but it seems not to work:

A_T_A = np.dot(A.T, A)
eigen_values, eigen_vectors = np.linalg.eig(A_T_A)
# eigenvectors
[[ -2.03500000e-01   4.89890000e+00   5.31170000e+00]
 [ -3.10000000e-03   1.02230000e+00  -2.64330000e+01]
 [  1.00000000e+00   1.00000000e+00   1.00000000e+00]]
# eigenvectors normalized
[[ -0.98365497700  -4.744666220   1.0]  # (m1, n1, 1)
 [  0.00304878118   0.210130914   1.0]  # (m2, n2, 1)
 [  25.7752417000  -5.132910010   1.0]] # (m3, n3, 1)

Which none of them fits model parameters (m=+5, n=-5)

How can I find (m, n) correctly? Thanks!

Author:sevolo,eproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/40451333/get-solution-to-overdetermined-linear-homogeneous-system-numpy
yy