Szukaj…


Uwagi

Od wersji 1.8 kilka procedur w np.linalg może działać na „stosie” macierzy. Oznacza to, że procedura może obliczyć wyniki dla wielu macierzy, jeśli są one zestawione razem. Na przykład A tutaj interpretuje się jako dwie ułożone w stos macierzy 3 na 3:

np.random.seed(123)
A = np.random.rand(2,3,3)
b = np.random.rand(2,3)
x = np.linalg.solve(A, b)

print np.dot(A[0,:,:], x[0,:])
# array([ 0.53155137,  0.53182759,  0.63440096])

print b[0,:]
# array([ 0.53155137,  0.53182759,  0.63440096])

Oficjalne dokumenty np określają to za pomocą specyfikacji parametrów, takich jak a : (..., M, M) array_like .

Rozwiązuj układy liniowe za pomocą np.solve

Rozważ następujące trzy równania:

x0 + 2 * x1 + x2 = 4
         x1 + x2 = 3
x0 +          x2 = 5

Możemy wyrazić ten układ jako równanie macierzowe A * x = b pomocą:

A = np.array([[1, 2, 1],
              [0, 1, 1],
              [1, 0, 1]])
b = np.array([4, 3, 5])

Następnie użyj np.linalg.solve aby rozwiązać x :

x = np.linalg.solve(A, b)
# Out: x = array([ 1.5, -0.5,  3.5])

Musi być kwadratowy i pełnego rzędu macierzy: Wszystkie jego wierszy musi być liniowo niezależne. A powinno być odwracalne / niepodzielne (jego wyznacznikiem nie jest zero). Na przykład, jeśli jeden wiersz A jest wielokrotnością innego, wywołanie linalg.solve spowoduje podniesienie LinAlgError: Singular matrix :

A = np.array([[1, 2, 1], 
              [2, 4, 2],   # Note that this row 2 * the first row
              [1, 0, 1]])
b = np.array([4,8,5])

Takie systemy można rozwiązać za pomocą np.linalg.lstsq .

Znajdź rozwiązanie najmniejszych kwadratów dla układu liniowego za pomocą np.linalg.lstsq

Najmniejsze kwadraty to standardowe podejście do problemów z większą liczbą równań niż nieznane, znane również jako układy o zbyt dużym zadaniu.

Rozważ cztery równania:

x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4

Możemy to wyrazić jako mnożenie macierzy A * x = b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([4,3,5,4])

Następnie rozwiąż za pomocą np.linalg.lstsq :

x, residuals, rank, s = np.linalg.lstsq(A,b)

x jest rozwiązanie, residuals Sum, rank w pozycję matrycy wejściowej A i s do wartości singularnych z A . Jeśli b ma więcej niż jeden wymiar, lstsq rozwiąże układ odpowiadający każdej kolumnie b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([[4,3,5,4],[1,2,3,4]]).T # transpose to align dimensions
x, residuals, rank, s = np.linalg.lstsq(A,b)
print x # columns of x are solutions corresponding to columns of b
#[[ 2.05263158  1.63157895]
# [ 1.05263158 -0.36842105]
# [ 0.05263158  0.63157895]]
print residuals # also one for each column in b
#[ 0.84210526  5.26315789]

rank i s zależy tylko od A , a zatem takie same jak powyżej.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow