Equazioni matriciali (lineari) e inversa di una matrice

Il comando linsolve può essere usato anche per risolvere equazioni matriciali lineari: date due matrici A e B di dimensioni rispettivamente n x k e n x m ci si può chiedere se esiste una matrice X n x m tale che AX = B .

> A := matrix(3,4,
[8, -2, 7, -6,
3, 4, -3, 7,
3, 2, -5, -6]):

B := matrix(3,5,
[9, -5, -7, -1, -6,
-1, -1, 6, 0, -6,
0, 0, -3, -2, -1]):

linsolve(A,B);

> A := matrix(3,4,
[8, -2, 7, -6,
3, 4, -3, 7,
3, 2, -5, -6]);
b:=vector(3,0);

> gaussjord(A);

> linsolve(A,b);

> A := matrix(4,3,
[5, -4, -3,
1, -7, -1,
7, 4, 3,
-8, 2, 4]):
B := matrix(4,5,
[-1, 9, 7, -3, -8,
-7, 3, 4, -7, 3,
8, -9, 0, -5, 0,
-4, -8, 2, 3, 5]):
{linsolve (A,B)};

> A := matrix(4,4,
[-2, -7, -8, -9,
-7, -5, 8, -7,
8, 7, 2, -5,
9, 9, -2, 8]):
B := matrix(4,5,
[-2, 2, 7, 2, 9,
-6, -8, -4, 0, -8,
7, -6, 8, 4, 5,
-2, -1, -5, -2, 2]):
linsolve (A,B);

Ci si può chiedere in particolare quando, data A esiste una matrice X tale che AX = Id (una tale X si chiama una inversa destra di A ).

> A := randmatrix(3,5):
linsolve(A,id(3));

> A := randmatrix(5,3):
{linsolve(A,id(5))};

> A := randmatrix(5,5):
linsolve(A,id(5));

Facciamo un esperimento: facciamo generare matrici casuali di dimensione 5 x 7 e vediamo per quante di esse esiste un'inversa destra.

> successi := 0:
B := id(5):
for i from 1 to 500 do
A := randmatrix(5,7):
C:={linsolve(A,B)}:
if not C = {} then successi := successi + 1 end if:
end do:
successi;

Osservazioni

Si può dimostrare che una tale X non esiste se A è una matrice n x m con m < n , ma anche quando n <= m non è detto che esista (contrariamente a quanto mostrerebbe l'esperimento).

> A := matrix(5,7,
[-24, -55, -93, -70, 10, -55, -89,
-21, -93, -77, -57, 4, 89, -33,
15, 31, 23, -6, 42, -84, 51,
939, 192, 346, 38, -432, 1551, -1346,
90, 49, 59, 16, -20, 84, -78]):
{linsolve(A,id(5))};

quello che si può dimostrare è però che la probabilità che una tale matrice ( n x m con n <= m ) non abbia una inversa destra è nulla.

Prendiamo una matrice quadrata A a caso, troviamo una sua inversa destra C ( siamo sicuri che esiste) e verifichiamo quanto fa AC

> A := randmatrix (5,5):
C:=linsolve (A,id(5)):
evalm (A &* C );

Non poteva essere altrimenti. Ma quanto fa CA ?

> evalm (C &* A ) ;

Questo è un fatto generale:

se A è una matrice quadrata che ha un'inversa destra C allora tale C è unica e anche CA = Id . Tale matrice C è detta l' inversa di A .

Maple può calcolare l'inversa di una matrice per mezzo dell'istruzione inverse

> inverse(A);

> equal(inverse(A),C);