Operazioni con le matrici
Per sommare due matrici/vettori si usa il normale segno + , mentre per moltiplicare due matrici (matrice con vettore) si usa il segno &* .
>
A := matrix(3,5):
B := matrix(3,7):
A + B;
A &* B;
> evalm(B);
Per ottenere i risultati bisogna chiederlo esplicitamente con il comando evalm
>
evalm(A + B);
evalm (A &* B);
Perché questi errori?
>
A := matrix (3,7,
[1,2,3,4,5,6,7,
9,8,7,6,5,4,3,
-1,-2,-3,-4,-5,-6,-7]):
B := matrix (3,7,
[-1,-2,-3,-4,-5,-6,-7,
-9,-8,-7,-6,-5,-4,-3,
1,2,3,4,5,6,7]):
evalm(A + B);
> C1 := evalm(A &* id(7));
> C2 := evalm(id(3) &* A);
>
equal ( A , C1 ) and equal ( A , C2 ) ;
> A := matrix ( 5, 7);B := matrix ( 5, 7);
> evalm(3 * A) ;
In generale il prodotto di matrici non è commutativo :
>
A := matrix( 3,3,[-7,2,3,-4,5,3,-7,11,9]):
B := matrix( 3,3,[-2,12,31,-14,1,1,0,-32,5]):
equal(A &* B , B &* A);
Per Maple il simbolo &* denota un prodotto che gode di tutte le proprietà formali della moltiplicazione tranne la proprietà commutativa, il comando evalm interpreta poi questo simbolo come prodotto di matrici.
L'elevamento a potenza di matrici quadrate si esegue semplicemente usando il simbolo ^
>
A := matrix (2,2,[0,1,1,0]);
evalm(A^4631);
> A:=matrix(7,8);
> evalm(B &* A);
La traccia
La traccia di una matrice quadrata è data dalla somma dei suoi elementi sulla diagonale
il calcolo della traccia di una matrice può essere effettueto mediante l'istruzione trace .
> trace(id(25750));
>
A:=matrix(100,100,(i,j)->j+i):
trace(A);
>
A:=matrix(20,20):
B:=matrix(20,20):
evalb (trace(A &* B) = trace(B &* A));
Questo calcolo mostra che prese due matrici arbitrarie,
e
20x20 la traccia di
coincide con la traccia di
. Questo è un fatto generale:
Siano
e
due matrici
x
allora
.
Lo si provi.
Non è però in generale vero che
. Per esempio:
>
A := matrix(2,2,[1,0,0,0]):
B := matrix(2,2,[0,0,0,1]):
trace( A &* B) ;
trace ( B ) * trace( A);
Le due matrici dell'esempio sono molto particolari, ciò non tragga in inganno. Tentiamo il seguente esperimento facciamo generare matrici quadrate 2x2 a caso per 500 volte e vediamo quante volte si ha che
.
>
successi := 0:
for i from 1 to 1000 do
A:=randmatrix(2,2):
B:=randmatrix(2,2):
if trace (A &* B) = trace (A) * trace (B) then
successi := successi + 1 fi:
od:
successi;
In effetti si può provare che
la probabilità che due matrici
x
con
siano tali che
è nulla
.
Diversamente vanno le cose rispetto alla somma:
>
A:=matrix(20,20):
B:=matrix(20,20):
evalb (trace(A + B) = trace(A) + trace(B));
Anche in questo caso il conto appena fatto è una dimostrazione solo nel caso di matrici 20x20 del seguente fatto generale:
siano
e
due matrici nxn, allora
.
Lo si provi.