2016-10-10 29 views
0

我試圖用numpy.linalg.lstsq解決以下同質系統下面的約束:解決均相體系組Ax = 0使用numpy的

Ax = 0 
    |x| = 1 

如果我只是純粹叫:

numpy.linalg.lstsq(A, np.zeros((A.shape[0],1), dtype=np.float)) 

該解決方案將是一個零列矩陣。我想知道如何創建| x | = 1約束,以便得到不同的解決方案而不是零矩陣。

謝謝。

+0

符號'| x | = 1'是否意味着'x'的規範應該是一個?如果是這種情況,那麼'A'的零空間中的任何標準化的'x'都是有效的解決方案。 – Stelios

+0

[Python(NumPy,SciPy),找到矩陣的空間空間的可能的重複](http://stackoverflow.com/questions/5889142/python-numpy-scipy-finding-the-null-space-of-a -matrix) –

+0

如果矩陣滿秩,則不能獲得零矩陣以外的任何東西 – percusse

回答

1

您通過強制解決方案的項爲1來設置約束,然後解決線性系統的其餘部分。一旦你有一個解決方案,你可以正常化。

import numpy as np 

a = np.arange(9).reshape(3, 3) 
b = a[:, 0].copy() 
# we impose a condition that first term be 1, 
x = np.linalg.lstsq(a[:, 1:], -b)[0] 
x = np.r_[1, x] 
x /= np.linalg.norm(x) 
print(a.dot(np.r_[1, x])) # [0, 0, 0] 
+0

如果對所有x矩陣Ax = 0,x的第一個元素是0?此外,說「我們知道第一個是1」應該是「我們強加第一個是1」。 –

+0

公平點。我想這使得這個問題重複http://stackoverflow.com/questions/5889142/python-numpy-scipy-finding-the-null-space-of-a-matrix然後。 – Elliot

+0

是的,我將它標記爲重複。好主意,但 –