Zoeken…


Opmerkingen

Vanaf versie 1.8 kunnen verschillende routines in np.linalg op een 'stapel' matrices werken. Dat wil zeggen dat de routine resultaten voor meerdere matrices kan berekenen als ze samen worden gestapeld. Bijvoorbeeld, hier wordt A geïnterpreteerd als twee gestapelde 3-bij-3 matrices:

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])

De officiële np docs specificeren dit via parameter specificaties zoals a : (..., M, M) array_like .

Los lineaire systemen op met np.solve

Overweeg de volgende drie vergelijkingen:

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

We kunnen dit systeem uitdrukken als een matrixvergelijking A * x = b met:

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

Gebruik vervolgens np.linalg.solve om op te lossen voor x :

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

A moet een vierkante en volledige matrix zijn: alle rijen moeten lineair onafhankelijk zijn. A moet inverteerbaar / niet-enkelvoud zijn (de bepalende factor is niet nul). Indien bijvoorbeeld één rij A is een veelvoud van een ander, bellen linalg.solve zal verhogen 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])

Dergelijke systemen kunnen worden opgelost met np.linalg.lstsq .

Vind de kleinste kwadratenoplossing voor een lineair systeem met np.linalg.lstsq

Kleinste vierkanten is een standaardbenadering van problemen met meer vergelijkingen dan onbekenden, ook bekend als overbepaalde systemen.

Overweeg de vier vergelijkingen:

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

We kunnen dit uitdrukken als een matrixvermenigvuldiging 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])

np.linalg.lstsq vervolgens op met np.linalg.lstsq :

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

x is de oplossing, residuals de som, rank de matrixrang van invoer A en s de enkelvoudige waarden van A Als b meer dan één dimensie heeft, lstsq het systeem op dat overeenkomt met elke kolom van 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 en s hangen alleen af van A en zijn dus hetzelfde als hierboven.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow