Amb Matrix
crearem els vectors columna i les matrius:
Matrix([v1,v2,..,vn])
Matrix([[a11,a12,...,a1n],[a21,a22,...,a2n],...,[am1,am2,...,amn]])
Per exemple:
>>> init_printing(use_unicode=True)
>>> v=Matrix([1,2])
>>> pprint(v)
⎡1⎤
⎢ ⎥
⎣2⎦
>>> A=Matrix([[1,2],[3,4],[5,6]])
>>> pprint(A)
⎡1 2⎤
⎢ ⎥
⎢3 4⎥
⎢ ⎥
⎣5 6⎦
Els operadors +
, -
i *
són aplicables en el sentit habitual sempre i quan els vectors i les matrius tinguin les dimensions apropiades.
Seguint amb l'exemple anterior:
>>> A+2*A)*v
⎡15⎤
⎢ ⎥
⎢33⎥
⎢ ⎥
⎣51⎦
Per conèixer la mida d'una matriu usem la propietat shape
que retorna el nombre de files i columnes.
Els mètodes row(m)
i col(n)
retornen la fila m
i la columna n
respectivament. La primera fila/columna és la 0
i m
i n
poden prendre valors negatius.
Per afegir una fila o una columna emprarem els mètodes row_insert(posicio,matriu)
i col_insert(posicio,matriu)
.
I per eliminar una fila o una columna emprarem els mètodes row_del(fila)
i row_del(columna)
, respectivament.
Vegem-ho amb exemples (continuació de l'anterior):
>>> A.row(0)
[1 2]
>>> A.col(1)
⎡2⎤
⎢ ⎥
⎢4⎥
⎢ ⎥
⎣6⎦
>>> A.row(-1)
[5 6]
>>> A=A.row_insert(3,Matrix([[7,8]]))
>>> A
⎡1 2⎤
⎢ ⎥
⎢3 4⎥
⎢ ⎥
⎢5 6⎥
⎢ ⎥
⎣7 8⎦
>>> A=A.col_insert(1,Matrix([-1,-2,-3,-4]))
>>> A
⎢ ⎥
⎡1 -1 2⎤
⎢ ⎥
⎢3 -2 4⎥
⎢ ⎥
⎢5 -3 6⎥
⎢ ⎥
⎣7 -4 8⎦
>>> A.row_del(0)
>>> A
⎡3 -2 4⎤
⎢ ⎥
⎢5 -3 6⎥
⎢ ⎥
⎣7 -4 8⎦
>>> A.shape
(3, 3)
Per construir matrius tenim els següents mètodes:
eye(n)
crea una matriu quadrada identitat de dimensió n
.zeros(m,n)
crea una matriu plena de 0
amb m
files i n
columnes.ones(m,n)
crea una matriu plena de 1
amb m
files i n
columnes.diag(a11,a22...)
crea una matriu quadrada amb els elements a11, a22...
a la diagonal.Exemples:
>>> I3=eye(3)
>>> I3
⎡1 0 0⎤
⎢ ⎥
⎢0 1 0⎥
⎢ ⎥
⎣0 0 1⎦
>>> zeros(2,4)
⎡0 0 0 0⎤
⎢ ⎥
⎣0 0 0 0⎦
⎢0 0 0 0 0 0⎥
>>> ones(3,1)
⎡1⎤
⎢ ⎥
⎢1⎥
⎢ ⎥
⎣1⎦
>>> diag(1,2,3)
⎡1 0 0⎤
⎢ ⎥
⎢0 2 0⎥
⎢ ⎥
⎣0 0 3⎦
>>> diag(ones(2,2),zeros(3,3),3)
⎡1 1 0 0 0 0⎤
⎢ ⎥
⎢1 1 0 0 0 0⎥
⎢ ⎥
⎢0 0 0 0 0 0⎥
⎢ ⎥
⎢0 0 0 0 0 0⎥
⎢ ⎥
⎢0 0 0 0 0 0⎥
⎢ ⎥
⎣0 0 0 0 0 3⎦
Per crear matrius amb entrades aleatòries cal invocar primer:
>>> from sympy.matrices import randMatrix
I el mètode constructor és radnMatrix(files,columnes,min,max)
on:
files
i columnes
són el nombre de files i columnes de la matriu generades, respectivament.min
i max
són els valors enters mínim i màxim, respectivament, de les entrades de la matriu.Exemple:
>>> randMatrix(2,3,0,10)
⎡0 6 3⎤
⎢ ⎥
⎣9 3 8⎦
Disposem dels següents mètodes:
det()
retorna el determinant de la matriu.T
retorna la matriu transposta.adjugate()
retorna la matriu adjunta.inv()
retorna la matriu inversa.inv_mod(m)
retorna la matriu inversa mòdul m.Exemple:
>>> A=Matrix([[2,0,-1],[-1,3,0],[-1,2,1]])
>>> A
⎡2 0 -1⎤
⎢ ⎥
⎢-1 3 0 ⎥
⎢ ⎥
⎣-1 2 1 ⎦
>>> A.det()
5
>>> A.T
⎡2 -1 -1⎤
⎢ ⎥
⎢0 3 2 ⎥
⎢ ⎥
⎣-1 0 1 ⎦
>>> A.adjugate()
⎡3 -2 3⎤
⎢ ⎥
⎢1 1 1⎥
⎢ ⎥
⎣1 -4 6⎦
>>> A.inv()
⎡3/5 -2/5 3/5⎤
⎢ ⎥
⎢1/5 1/5 1/5⎥
⎢ ⎥
⎣1/5 -4/5 6/5⎦
>>> A.inv_mod(3)
⎡0 2 0⎤
⎢ ⎥
⎢2 2 2⎥
⎢ ⎥
⎣2 1 0⎦
Recordem que:
Que si s'ho fem analitzar a Python:
>>> invA=1/det(A)*A.adjugate()
>>> invA==A.inv()
True
El mètode rref()
que fa la transformació de Gauus-Jordan d'una matriu (aquest mètode retorna la matriu de la transformació de Gauss-Jordan i les columnes pivot).
Exemples:
>>> A=randMatrix(3,4,-5,5)
>>> A
⎡3 4 -4 -3⎤
⎢ ⎥
⎢3 1 -4 2 ⎥
⎢ ⎥
⎣-4 -5 -2 4 ⎦
>>> A.rref()
⎛⎡ 37 ⎤ ⎞
⎜⎢1 0 0 ── ⎥ ⎟
⎜⎢ 33 ⎥ ⎟
⎜⎢ ⎥, (0, 1, 2)⎟
⎜⎢0 1 0 -5/3 ⎥ ⎟
⎜⎢ ⎥ ⎟
⎝⎣0 0 1 -5/66⎦ ⎠
Per recuperar la matriu de la transformació de Gauu-Jordan farem:
>>> A.rref()[0]
⎡ 37 ⎤
⎢1 0 0 ── ⎥
⎢ 33 ⎥
⎢ ⎥
⎢0 1 0 -5/3 ⎥
⎢ ⎥
⎣0 0 1 -5/66⎦