| > | restart; |
Vi skal benytte os intensivt af pakken LinearAlgebra i kurset LinAlg (derimod vil vi undgå pakken linalg!). Derfor vil vi altid begynde med:
| > | with(LinearAlgebra); |
| (1) |
| > |
Matrixregning i Maple
Matricer af størrelse op til 10x10 indtastes nemmest med brug af menuen Matrix til venstre. Benyt musen og knappen "Choose" til at vælge det ønskede format og benyt tabulator- eller returknappen mellem indgangene.
| > | A[1]:=Matrix([[ 2 , 5 ],
[ 0 , 1 ], [ 4 , -2 ]]); |
![]() |
(1.1) |
| > | A[2]:=Matrix([[ I , 0 , 0 ],
[ 0 , -I , 2+I ]]); |
| (1.2) |
| > | A[3]:=Vector[row]([ 4 , 4 , 5 ]); |
| (1.3) |
Bemærk at Maple opfatter matricer med kun én række eller kun én søjle som vektorer, men regner med dem lige som alle andre matricer. Matrixmultiplikation indikeres med punktum (og ikke med stjerne!):
| > | A[1].A[2]; |
![]() |
(1.4) |
Hvis ikke et produkt har mening protesterer Maple med
| > | A[1].A[3]; |
| Error, (in LinearAlgebra:-MatrixVectorMultiply) invalid input: LinearAlgebra:-MatrixVectorMultiply expects its 2nd argument, v, to be of type Vector[column] but received Vector[row](3, {(1) = 4, (2) = 4, (3) = 5}) |
Fordi den associative regel gælder giver det mening at udregne
| > | A[3].A[1].A[2]; |
| (1.5) |
| > |
Man kan også indtaste matricerne helt selv ved at benytte symbolikken:
| > | B:=<<0,1/2,1/2>|<1/3,1/3,1/3>|<1/2,0,1/2>>; |
![]() |
(1.6) |
der skal læses som tre søjler sat ved siden af hinanden med "|". Når først indtastningen er sket har metoden ingen betydning. Vi ganger med skalar med
| > | 2*B; |
![]() |
(1.7) |
adderer med
| > | B+B; |
![]() |
(1.8) |
og ganger med
| > | B.B; |
![]() |
(1.9) |
Man kan også tage potenser (idet matricen er kvadratisk!)
| > | B^2; |
![]() |
(1.10) |
| > | B^100; |
| (1.11) |
| > | evalf(B^100); |
![]() |
(1.12) |
Matricer må gerne have symbolske indgange
| > | C:=<<1|c|2>,<0|2|-3>,<d|-2|-1>>; |
![]() |
(1.13) |
| > | B.C; |
![]() |
(1.14) |
Visse matricer er forudprogrammerede i Maple. Vigtigst er IdentityMatrix
| > | E:=IdentityMatrix(3); |
![]() |
(1.15) |
| > | E.B; |
![]() |
(1.16) |
Det er muligt - men vi har endnu ikke set hvordan - at beregne den inverse matrix til visse matricer:
| > | MatrixInverse(B); |
![]() |
(1.17) |
| > | B^(-1); |
![]() |
(1.18) |
men ikke til alle...
| > | MatrixInverse(<<0 | 1>, <0 | 1>>); |
| Error, (in LinearAlgebra:-LA_Main:-MatrixInverse) singular matrix |
| > |
| > |
Illustrere lineære afbildninger på R^2
De følgende tre kommandoer skal benyttes ved løsning af ugeopgave 1.2:
| > | futhark:=[<0,0>,<0,3>,<1,2>,<0,1>,<1,0>]; |
| (2.1) |
| > | tegn:=(LL,farve)->plot([seq([LL[i][1],LL[i][2]],i=1..5)],scaling=constrained,view=[-10..10,-10..10],thickness=3,color=farve); |
| (2.2) |
| > | illustrer:=(A,farve)->plots[display]([tegn(futhark,black),tegn(map(unapply(A.x,x),futhark),farve),plots[textplot]([8,10,A[1,1]],font=[helvetica,bold ,24]),plots[textplot]([10,10,A[1,2]],font=[helvetica,bold ,24]),plots[textplot]([8,8,A[2,1]],font=[helvetica,bold ,24]),plots[textplot]([10,8,A[2,2]],font=[helvetica,bold ,24])]); |
| (2.3) |
Med disse tre kommanoder kan man illustrere effekten af at tage en lineær afbildning givet ved en 2x2 matrix på figuren der ligner et oldnordisk R. Vi har fx
| > | S:=<<1,0>|<0,-1>>; illustrer(S,green); |
![]() |
Figuren i sort er den oprindelige, og den i grøn fremkommer heraf ved at tage den anførte lineære afbildning på hvert punkt i den sorte figur. Vi har fx også
| > | F:=<<3,0>|<0,3>>; illustrer(F,red); |
![]() |
Sådan virker "illustrer"
Det er ikke nødvendigt for at løse opgaven, men lad os forklare hvordan illutsrer virker. Vi har noteret 5 hjørner i den oprindelige figur
| > | futhark; |
| (2.1.1) |
og tegn virker ved at forbinde disse med linjestykker:
| > | tegn(futhark,black); |
![]() |
Ved noget lidt mere avanceret teori om linære afbildninger vides at de altid tager linjestykker i linjestykker. Så for at beregne billedet af R'et skal vi bare beregne billedet af hjørnerne, og forbinde dem med linjestykker. [Det er derfor vi benytter et kantet R!!!]
Der er en god kommando map der kan bruges til at tage en afbildningen på en hel liste af punkter. Har vi fx
| > | T:=<<3 | 0>, <0 | 1>>; |
| (2.1.2) |
er afbildningen
| > | f:=unapply(T.x,x); |
| (2.1.3) |
så
| > | tegn(map(f,futhark),yellow); |
![]() |
giver billedet. I illustrer sættes dette sammen, og matricen opskrives med textplot
| > |
| > |