Lektion1 | Lektion 2
| Lektion 3
Detta är den tredje och sista Maple-lektionen i kursen.
En del Maple-information kommer dock att lämnas i samband med den kommande datorlaborationen och den därmed sammanhörande inlämningsuppgiften.
Vi börjar som vanligt med:
> with(linalg):
[ 2, 1, 3, 1, 1, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 3](Här finns ett experiment med en textfil med matriser som är färdiga att klippas och klistras in i ett maple-worksheet: Favoritmatriser)
>
BA:=matrix(4,4,
[ 2, 1, 3, 1,
1, 0, 1, 1,
0, 2, 1, 0,
0, 1, 2, 3]
);
Vi väljer högerleden 1,2,3,resp.4 och matar alltså in kolumnmatrisen:
> b:=matrix(4,1,[1,2,3,4]);
Vi kan nu bilda totalmatrisen BT med hjälp av kommandot concat, som lägger ihop matriser horisontellt:
> BT:=concat(BA,b);
(Motsvarande kommando som lägger ihop matriser vertikalt är 'stackmatrix(A,B);' )
Vi kan nu börja låta Maple lösa ekvationssystemet som svarar mot totalmatrisen BT ovan.
Vi börjar med vanlig Gausselimination, som vi låter följas av återsubstitution.
Maple har ett kommando 'gausselim(A)' som helt enkelt reducerar matrisen A till trappstegsform.
Dessuton finns kommandot 'backsub(C)' som räknar ut lösningen om denna existerar. Här är C den matris på trappstegsform som erhålles med Gauss-eliminationen.
> C:=gausselim(BT);
Detta är som synes en matris på en sorts trappstegsform (row-echelon form). Maple är tydligen inte så noga med att fixa ledande ettor i diagonalen.
Vi fullbordar nu lösningen med en återsubstitution:
> backsub(C);
Här har vi alltså fått den sökta lösningen.
Nu försöker vi med Gauss-Jordan-elimination i stället.
Då är ju slutprodukten en matris på reducerad trappstegsform.
Maple har kommandot 'gaussjord(A);'
> gaussjord(BT);
Här syns nu lösningen direkt, utan återsubstitution.
Högra kolumnen innehåller ju de sökta värdena på variablerna.
Den tredje och sista metoden som ingår i kursen är metoden med matrisinversion.
Denna metod fungerar som bekant endast då systemmatrisen är kvadratisk och då determinanten är skild från noll.
I vårt exempel är systemmatrisen BA kvadratisk.
Vi undersöker determinanten:
> det(BA);
6 är ju inte 0 så det kommer att fungera.
Vi bildar inversmatrisen till systemmatrisen:
> F:=evalm(BA^(-1));
Den sökta lösningen fås som känt genom beräkning av (BA)-1 . b ,
där b är högerledsvektorn.
> v:=evalm(F&*b);
Som synes samma resultat som med de två första metoderna.
Vi upprepar nu denna procedur i ett fall där systemet visar sig ha oändligt måmga lösningar:
Mata in matrisen BC :
>
BC:=matrix(4,4,[ 0, 2,-1, 3,
-1, 1, 2, 0,
1, 1,-3, 3,
1, 5, 5, 9]
);
Fortsätt med högerleden 2, 1, 1 resp. 3:
> c:=matrix(4,1,[2,1,1,3]);
Bilda totalmatrisen:
> CT:=concat(BC,c);
Börja med Gausselimination:
> CT2:=gausselim(CT);
Ja här har vi alltså fått en nollrad vilket tyder på att det fanns ett dolt samband mellan ekvationerna. Detta leder tydligen till att vi får oändligt många lösningar. Observera att hela sista raden är en nollrad. Om endast systemmatrisen hade fått en nollrad medan motsvarande högerled varit skilt ifrån noll, hade systemet inte haft någon lösning alls.
Vi fortsätter med återsubstitution:
> backsub(CT2);
>
Här är alltså lösningen. Lite svårläst kanske eftersom Maple envisas med parameternamnet '_t1'.
Byt ut detta mot enbart 't' så blir det mer läsvänligt.
Vi avslutar med Gauss-Jordan-elimination:
> G:=gaussjord(CT);
Ja, det är en reducerad trappstegsform, men den här gången saknar en kolumn i systemmatrisen en ledande etta, vilket tyder på oändligt många lösningar.
Därför är det den här gången lämpligt att göra återsubstitution även efter Gauss-Jordan:
backsub(G);
> Samma svar som med Gauss-elimination alltså.
Därmed har vi inte fler metoder eftersom matrisinversionsmetoden inte klarar av fallet med oändligt många lösningar. vi kan ju kolla systemdeterminanten så förstår vi varför:
> det(BC);
Just det! Determinanten är noll så det finns ingen invers.
Avslutningsvis kan vi testa Maple (och din dator) med litet mer krävande beräkningar:
Ett sätt att enkelt skapa en viss typ av stora matriser är att använda kommandot hilbert(n); som ger s.k. Hilbertmatriser.
Dessa matriser har mycket små värden på determinanten, vilket gör dem svårhanterliga vid inverteringar, ekvationssystemlösningar och liknande.
Kommandot 'hilbert(9)' ger en 9x9-matris:
> H:=hilbert(9);
Vi kollar determinanten:
> det(H);
Oj! Inte särskilt stort tal. Men det är i alla fall inte = 0.
Vi försöker nu med högerleden 0,1,2,3,...,8:
> d:=matrix(9,1,[0,1,2,3,4,5,6,7,8]);
..och löser systemet Hx = d genom x=H-1 . d:
> x1:=evalm(H^(-1)&*d);
OK. Avsluta nu Lektion 3 med litet egna övningar. Om man vill ange ett speciellt element i en matris använder man beteckningar av typ 'B[1,2]' för B:s element i rad 1 och kolumn 2. Om man vill att en viss rad i en sektion inte skall exekveras tillsammans med de andra raderna kan man sätta '#' framför raden.
Om man vill gå vidare från en sektion utan föregående exekvering, flyttar man visaren och klickar utanför sektionen (=vänstra hakparentesen) och matar in ny text där. Lycka till!
Gör ex.vis Gauss och Gauss-Jordan på Exempel 3.
Testa också Maples förmåga att räkna med bokstäver genom att gå tillbaks och modifiera matriserna så att enstaka siffror byts ut mot parametrar ('a', 'b' osv.)
Kom bara ihåg att exekvera alla Maple-sektioner som påverkas av förändringen. Denna exekvering ska dessutom ske i rätt ordning.
Ibland behövs
'evalm(B[1,2]);' för att man ska få detta värde utmatat.