Matrisprodukt och determinanter.
Vi börjar sessionen med att ladda in linalgpaketet.
Glöm inte ':' efter i stället för ';' för undvikande av stort output.
> with(linalg):
Warning, new definition for norm
Warning, new definition for trace
Vi matar nu in två allmänna 3x3-matriser utan att specificera komponenter.
Resultatet blir allmänna matriser som Maple uttrycker med dubbelindicerade parametrar.
När produkten bildas (observera matrisprodukttecknet '&*') tar man lämpligen 'evalm'
för produkten 'G&*H' för att se komponenterna:
> G:=matrix(3,3);
> H:=matrix(3,3);
> P:=evalm(G&*H);
>
Detta är alltså den allmänna matrisprodukten för två 3x3-matriser.
Nu testar vi den ganska märkliga determinantrelationen det(G)det(H) = det(GH)
som sammanfattar mycket komplexa uttryck.
Vi bildar alltså produkten av det(G) och det(H) samt bildar det(GH) = det(P)
>
dGH:=det(G)*det(H);
dP:=det(P);
Kan verkligen dessa två tal vara lika?
Testa med 'simplify'!
> S:=simplify(dGH-dP);
Jo, faktiskt!
Nu matar vi in två nya 3x3-matriser för att studera transponatoperationen
(som ju byter rader och kolumner i en matris).
Kommandot för transponering är 'transpose'.
>
G:=matrix(3,3,[1,2,3,3,2,1,2,3,4]);
H:=matrix(3,3,[5,0,7,1,1,1,2,1,6]);
GT:=transpose(G);HT:=transpose(H);
Nu testar vi relationen (GH)T = HTGT:
>
T1:=transpose(G&*H);
T2:=evalm(HT&*GT);
Stämmer alltså bra eftersom T1 = T2.
Här testar vi det system som visas i OH2-3, i LA2, som alltså innehåller
parametrarna a och b.
Vi matar in matrisen A, som innehåller systemets matris i de tre första kolumnerna och högerledsvektorn
i den sista fjärde.
> A:=matrix(3,4,[1,3,4,2,2,8,a,1,-1,-2,1,b]);
Gausselimination utförs helt enkelt med kommandot 'gausselim'.
> E:=gausselim(A);
Man känner nästan igen resultatet från OH-bilden.
Dock är tydligen Maple inte så noga med att fixa ettor i diagonalen.
Kommen så här långt brukar man lösa ut z och därefter y och x.
Detta kallas återsubstitution.
Maple ordnar det med kommandot 'backsub':
> E1:=backsub(E);
Här får vi alltså precis den lösning som anges då a är skilt från 18. Kontrollera!
Nu prövar vi Maple då a = 18. Vi sätter in värdet 18 i 2:a raden tredje kolumnen, där a stod förut.
> A[2,3]:=18
> e1:=gausselim(A);
Återsubstitutionen borde här rimligen misslyckas:
> e2:=backsub(e1);
Error, (in backsub) inconsistent system
Alldeles riktigt: Slutsatsen är att lösning saknas.
Men Maple tänkte inte på fallet b=-7/2, då det borde
finnas oändligt många lösningar.
Vi testar, sätter in 0 i e1:s 3:e rad, 4:e kolumn och återsubstituerar.
>
e1[3,4]:=0;
e21:=backsub(e1);
Ja! Det visar sig att Maple kan räkna med parametrar när det behövs.
Här uttrycks lösningslinjen på ett ganska svårläst men korrekt sätt.
Jämfor med OH-bilden Gausselimination2 !
VI avslutar med att titta på inversmatriserna.
Sådana behöver som bekant att ursprungsmatrisen har determinanten skild från 0.
Vi kollar determinanterna för de tidigare införda matriserna G och H:
> dG:=det(G);dH:=det(H);
G:s determinant är alltså 0 medan H:s är skild från 0.
Vi testar inverserna som i Maple tas fram med 'inverse'.
> GI:=evalm(inverse(G));IH:=evalm(inverse(H));
Error, (in inverse) singular matrix
Som väntat felmeddelande för 'inverse(G);'
Vi visar nu att man kan lösa kvadratiska system Av=h genom v= A-1h.
Vi inför en högerledsvektor h och använder H:s invers IH som redan beräknats:
> h:=matrix(3,1,[1,2,3]);
> sol1:=evalm(IH&*h);
Här fås alltså systemets lösning som IH*h.
Vi prövar också med Gausselimination.
Här måste vi lägga in kolumnvektorn h som sista kolumn efter H:s kolumner.
Detta kan göras med kommandot 'concat' som klistrar ihop matriser horisontellt.
(Kommandot 'stackmatrix' gör samma sak vertikalt).
> Hh:=concat(H,h);
Nu kan vi Gausseliminera och återsubstituera som vanligt på matrisen Hh:
> sg:=gausselim(Hh);
> sol2:=backsub(sg);
Samma lösning alltså!
Fortsätt gärna med att lösa ex.vis kursbokens linjära system med Maple, valfri metod.