7. Line\303\246r AlgebraLinearAlgebra-pakkenFra og med Maple 6 har der v\303\246ret to pakker med line\303\246r algebra: LinearAlgebra og den nu for\303\246ldede linalg. Her vil linalg kun blive omtalt af hensyn til forvekslingsmuligheden: Man b\303\270r eksempelvis v\303\246re opm\303\246rksom p\303\245, at matrix er stavem\303\245den for en matrix i linalg, men i LinearAlgebra skal skrives Matrix. Procedurenavnene i de to pakker kan skelnes fra hinanden ved at der i den nye pakke bruges store forbogstaver i navnene, og at der ikke bruges forkortelser. Ved sammensatte ord begynder alle delene med stort, eksempelvis JordanBlockMatrix.with(LinearAlgebra): Definition af matrix og vektorDer er mange muligheder, n\303\245r man vil definere matricer og vektorer. Det kan v\303\246re ret forvirrende. Men der findes en hj\303\246lpeside om shortcuts:?Matrix and Vector Construction ShortcutsHer er en kort introduktion.En matrix A kan defineres p\303\245 f\303\270lgende m\303\245de, hvor man giver Maple en liste af lister, nemlig en liste af r\303\246kkerne i matricen. Hver r\303\246kke er selv en liste: A:=Matrix([[0,1,3],[1,2,-5],[3,1,-4]] );En kort version, hvor det stadig er r\303\246kkevis indtastning. R\303\246kkerne er adskilt af semikolonner:A:= <0,1,3;1,2,-5;3,1,-4>;En s\303\270jlevektor v kan defineres s\303\245ledesv:=Vector([7,9,13]);Mere udf\303\270rligt kunne v\303\246re skrevet Vector[column]([7,9,13]);En kort version:v:= <7,9,13>;En r\303\246kkevektor:Vector[row]([7,9,13]);Kort version<7|9|13>;En matrix med \303\251n s\303\270jle kan f.eks. laves s\303\245ledes:w:=<1;2;3>;Man skal v\303\246re opm\303\246rksom p\303\245, at i Maple har en matrix med \303\251n s\303\270jle ikke samme type som en s\303\270jlevektor: whattype(w);whattype(v);Man kan dog lave en vektorversion af matricen og omvendt:convert(w,Vector);whattype(%);convert(v,Matrix);whattype(%);Vi definerer 3 s\303\270jlevektorer ved en 3-dobbelt tilordning:s1,s2,s3:= <0,1,3>,<1,2,1>,<3,-5,-4>;Vi danner nu en matrix best\303\245ende af de tre s\303\270jlevektorer s1, s2 og s3. Dette kan g\303\270res enten ved brug af Matrix, eller ved brug af <...>. Den lodrette streg | skal s\303\245 benyttes til at adskille s\303\270jlerne. Her vises begge disse metoder p\303\245 \303\251n gang:Matrix([s1,s2,s3])= <s1|s2|s3>;En kort version, med direkte indtastning af s\303\270jlerne:<0,1,3|1,2,1|3,-5,-4>;Man kan angive en funktion, der fort\303\246ller hvordan elementerne i matricen (eller vektoren) skal regnes ud. Vil man eksempelvis definere en 2x7-matrix i hvilket elementet i positionen (i, j) skal v\303\246re tallet LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNictRiw2JVEiakYnRjhGWi1JI21vR0YkNi1RKCZtaW51cztGJy9GZW5RJ25vcm1hbEYnLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGYnAtRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJpRidGOEZaLUkjbW5HRiQ2JFEiMkYnRmBvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0Zgb0YrRmBvRitGYG8= , s\303\245 g\303\270r man s\303\245ledesMatrix(2,7,(i,j)->j-i^2);Hvis man \303\270nsker en kvadratisk matrix, eksempelvis en 3x3, beh\303\270ver man kun give r\303\246kkeantallet:Matrix(3,(i,j)->j-i^2);De f\303\270rste 10 kvadrattal som elementerne i en r\303\246kkevektor kan f\303\245s s\303\245ledes:Vector[row](10,i->i^2);En matrix kan ogs\303\245 defineres ved at definere dens elementer et for et.F\303\270rst defineres C som en 2x3-matrix. C:=Matrix(2,3);Hvis som her ingen information er angivet om elementerne, bliver de som det ses sat til nul.Nu omdefinerer vi et par af elementerne: C[2,3]:=7: C[1,2]:=a: C;Eller vi kan g\303\270re s\303\245ledes, hvor fill- tilf\303\270jelsen fort\303\246ller, hvad de resterende pladser skal fyldes ud med (hvis ikke det er med nul):C:=Matrix(2,3,{(1,1)=5,(2,3)=13},fill=-14);En matrix bliver vist, hvis blot den bliver n\303\246vnt. Dette foruds\303\246tter dog (til at begynde med), at hverken r\303\246kke- eller s\303\270jle-antal er st\303\270rre end 10 . Har matricen flere r\303\246kker eller s\303\270jler, vil matricen som default ikke blive vist. Her f\303\270lger et eksempel p\303\245 en 2x11-matrix:B:=Matrix(2,11,(i,j)->i+j-1);Pr\303\270v nu at h\303\270jreklikke p\303\245 output. V\303\246lg Browse. Her kommer nu en Matrix-Browser frem. Man kan \303\246ndre den \303\270vre gr\303\246nse p\303\245 10 ved en interface-kommando. Vil man f.eks. ingen gr\303\246nse have, kan man g\303\270re s\303\245ledes:interface(rtablesize=infinity);Output fra ovenst\303\245ende kommando er den tidligere \303\270vre gr\303\246nse, alts\303\245 10. Herefter vil matricen B blive vist:B; Vi s\303\246tter rtablesize tilbage til 10:interface(rtablesize=10);En matrix med symbolske (ikke konkrete) v\303\246rdier kan laves s\303\245ledesMatrix(2,5,symbol=a);Ved alt det ovenst\303\245ende og ved almindelig regning med matricer (addition, multiplikation m.m.) er LinearAlgebra-pakken ikke n\303\270dvendig.Vil man have en tilf\303\246ldig matrix, kan man bruge RandomMatrix, der ligger i LinearAlgebra-pakken. Vi definerer her en 2x5-matrix med elementer valgt som tilf\303\246ldige hele tal mellem -9 og 9:C:=RandomMatrix(2,5,generator=-9..9);Hvis der i stedet bruges decimaltal i generator-tilf\303\270jelsen, er output ogs\303\245 decimaltal:RandomMatrix(2,5,generator=-9.0..9.0);L\303\270sning af ligningssystemerL\303\270sning af line\303\246re ligningssystemer foreg\303\245r ved hj\303\246lp af LinearSolve. Antag, at ligningssystemet er givet p\303\245 formen er Ax = b, hvor A er givet ved:A:=<0,2,3;1,5,6;2,-1,-3>;og hvor s\303\270jlevektoren b er givet vedb:= <-3,0,3>;Systemet af ligninger kan skrives ud ved brug af GenerateEquations:sys:=GenerateEquations(A,[x1,x2,x3],b);Systemet kunne s\303\245 l\303\270ses vd brug af den generelle procedure solvesolve(sys,[x1,x2,x3]);Det er imidlertid en omvej, hvis systemet er givet ved matricen A og h\303\270jresiden b. Systemet b\303\270r da l\303\270ses ved brug af LinearSolve, der kun som input skal have A og b eller i stedet totalmatricen for systemet: LinearSolve(A,b);Systemets totalmatrix kan simplest dannes ud fra A og b ved brug af tegnene <, > og |T:=<A|b>;men kan ogs\303\245 dannes s\303\245ledesMatrix([A,b]);F\303\245r LinearSolve kun \303\251t argument, s\303\245 tolkes dette som totalmatricen for et line\303\246rt ligningssystem med en vektor (den sidste s\303\270jle) som h\303\270jresiden:LinearSolve(T);Vil man l\303\270se et system af formen AX = B, hvor B er en matrix (med mere end \303\251n s\303\270jle), s\303\245 skal man bruge syntaksen med to argumenter:B:=<b|<3,2,-2>>;LinearSolve(A,B);Gauss-elimination\303\230nsker vi at f\303\270lge l\303\270sningen af systemet Ax = b via Gauss-elimination, g\303\270r vi som f\303\270lger.F\303\270rst dannes totalmatricen:T:=<A|b>;Resultatet af Gauss-elimination f\303\245s s\303\245ledes:GaussianElimination(T);Herefter kan den reducerede matrix igen omskrives til det tilsvarende ligningssystem:res:=GenerateEquations(%,[x1,x2,x3]);Opskrevet under hinanden:for k from 1 to 3 do res[k] end do;Disse ligninger kan l\303\270ses nedefra og opefter.Resultatet af Gauss-Jordan-elimination (dvs. reduktion til reduceret echelonform):ReducedRowEchelonForm(T);Omskrivning til det tilsvarende ligningssystem giver et simpelt resultat, der jo faktisk er l\303\270sningen til ligningssystemet:GenerateEquations(%,[x1,x2,x3]);RowOperation udf\303\270rer de enkelte r\303\246kke- eller s\303\270jleoperationer:F\303\270rst ombyttes r\303\246kke 1 og 2:T1:=RowOperation(T,[1,2]);Dern\303\246st r\303\246kkeoperationen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEjUjNGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTEYrLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GUy1JI21uR0YkNiRRIjJGJ0Y5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZnbkYrLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJ0Y5 :T2:=RowOperation(T1,[3,1],-2);R\303\246kkeoperationen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEjUjNGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTEYrLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GUy1JJm1mcmFjR0YkNigtSSNtbkdGJDYkUSMxMUYnRjktRiM2JS1GWTYkUSIyRidGOUYvRjIvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmBvLyUpYmV2ZWxsZWRHRj0tRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORmlvLUYsNiVRI1IyRidGL0YyLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJ0Y5 bringer s\303\245 matricen p\303\245 echelonform:T3:=RowOperation(T2,[3,2],11/2); Man kan i stedet bruge Pivot, hvor kommandoen Pivot( A, i, j); skaber nuller over og under (i, j)-elementet i den j'te s\303\270jle:Pivot(T1,1,1);Ved tilf\303\270jelse af et fjerde argument kan man styre i hvilke r\303\246kker, der skal skabes nuller. Det fjerde argument kan enten v\303\246re et r\303\246kkenummer, en liste af r\303\246kkenumre eller et interval af r\303\246kkenumre af formen n..m.Her med et fjerde argument, der fort\303\246ller, at der skal skabes nuller i 3. r\303\246kke: Pivot(%,2,2,3);hvorimod f\303\270lgende kommando skaber nuller b\303\245de over og under (2, 2)- elementet:Pivot(%%,2,2);Eksempel p\303\245 ligningssystem med l\303\270sning indeholdende en fri parameterVi kan billigt lave et eksempel p\303\245 et ligningssystem med l\303\270sning indeholdende en fri parameter ved at fjerne eksempelvis f\303\270rste r\303\246kke i A, alts\303\245 betragte undermatricen:A1:=A[2..3,1..3];Lad b1 v\303\246re h\303\270jresiden:b1:=<1,2>;Vi l\303\270ser systemet A1 x = b1. Ved tilf\303\270jelsen free = t bestemmer vi, at en (evt.) fri parameter kommer til at hedde t (der automatisk forsynes med et index):LinearSolve(A1,b1,free=t);Mellemregningerne f\303\270lger.
Totalmatricen:T1:=<A1|b1>;GaussianElimination(T1);Evt. videre til reduceret echelonform:ReducedRowEchelonForm(T1);Det tilsvarende ligningssystem:GenerateEquations(%,[x1,x2,x3]);x3 er \303\245benbart en fri parameter og vi s\303\246tter den til 11*t for at undg\303\245 br\303\270ker i resultatet:subs( x3=11*t,%);Dette simple ligningssystem skal nu l\303\270ses for x1 og x2. Dette kan g\303\270res vha. af solve. Derfor g\303\270r vi s\303\245ledes:solve(%, {x1,x2});Endelig kan vi skrive resultatet p\303\245 vektorform s\303\245ledes:res:=subs(%, x3=11*t, <x1,x2,x3>);ExpandVectorMed lidt programmering (se kapitlet herom) kan man lave sig en procedure, der skriver resultatet ovenfor p\303\245 formen u + t*v, hvor dog det s\303\246dvanlige gangetegn `* ` er erstattet af `&*` for at forhindre, at Maple automatisk s\303\246tter det omhyggeligt opsplittede resultat tilbage igen. Tegn, der begynder med &, accepteres af Maple. De fungerer i realiteten blot som skilletegn.Id\303\251en i proceduren er f\303\270lgende.I Maple 13 og senere versioner kan man ved tilf\303\270jelse af en tilde ~ til funktioner og operatorer (s\303\245 som `+`, `*`, `=`) f\303\245 disse til at virke elementvis p\303\245 matricer, vektorer, arrays, tabeller, lister og m\303\246ngder ("containere").Her bruger vi coeff~ til at finde koefficienten til LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEidEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMUYnL0Y2USdub3JtYWxGJ0YyRjUvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJ0Y+ p\303\245 hver af elementerne i vektoren res:v:=coeff~(res,t,1);Hermed er u givet vedu:=res-t*v;Den \303\270nskede opsplitning er nuu+t&*v;Proceduren kan h\303\245ndtere flere frie parametre:ExpandVector:=proc(v::Vector) local d,S,n,w,i,v0;
uses LinearAlgebra;
d:=Dimension(v);
#
#Vi finder navnene p\303\245 parametrene og deres antal (n):
S:=indets(v,name);
n:=nops(S);
#
#Vi finder koefficientvektorerne w[i] til parametrene:
for i to n do w[i]:=coeff~(v,S[i],1) end do;
(*
Vi bestemmer den vektor, der ingen parameter indeholder.
Hvis denne er nulvektoren, s\303\246tter vi den til 0,
s\303\245 den forsvinder helt i output:
*)
v0:=v-add(S[i]*w[i],i=1..n);
if {seq(v0[i],i=1..d)}={0} then v0:=0 end if;
#Alternativ:
#if Equal(v0,ZeroVector(d)) then v0:=0 end if;
#Her kommer s\303\245 output:
v0+add(S[i]&*w[i],i=1..n);
end proc:ExpandVector(res);Det oprindelige resultat f\303\245s igen ved at erstatte `&*`med `*`:eval(%,`&*`=`*`);MatrixproduktLad A v\303\246re matricenA:=Matrix([[0,1,3],[1,2,-5],[3,1,-4]] );Vi lader B v\303\246re en matrix med elementer valgt som tilf\303\246ldige hele tal mellem -9 og 9:B:=RandomMatrix(3,3,generator=-9..9);Produktet mellem A og B f\303\245s s\303\245ledes, hvor prikken er et punktum:A.B;Lad b v\303\246re s\303\270jlevektoren:b:=<1,-2,6>;Produktet Ab f\303\245s ogs\303\245 vha. punktum:A.b; Ved multiplikation med en skalar bruges det s\303\246dvanlige gangetegn * :s*A, 7*A;Punktum tillades, n\303\245r skalaren er konkret, alts\303\245 faktisk er et tal, eksempelvis 7. S\303\245 m\303\245 man dog s\303\270rge for, at der er et mellemrum mellem 7 og punktum for at forhindre fortolkning som decimaltal. Uden mellemrum f\303\245s en fejlmelding:7.A;Nu med mellemrum:7 .A;Det er bedst konsekvent at bruge * til multiplikation med skalar.Transponering. Skalarprodukt.Den transponerede matrix til en matrix A f\303\245s s\303\245ledes:Transpose(A);Matrixproduktet LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiYtSSVtc3VwR0YkNiUtRiw2JVEiQUYnRjhGWi1GLDYlUSJURidGOEZaLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1JI21vR0YkNi1RMSZJbnZpc2libGVUaW1lcztGJy9GZW5RJ25vcm1hbEYnLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGW3FGXG9GaW9GK0Zpbw== vil altid v\303\246re en symmetrisk matrix:Transpose(A).A;Vi ser, at matricen er symmetrisk.Skalarproduktet mellem to vektorer kan f\303\245s ved brug af DotProduct:v:=RandomVector[row](3);w:=RandomVector[row](3);DotProduct(v,w);DotProduct ignorerer forskellen mellem r\303\246kke- og s\303\270jlevektorer, hvilket jo er rimeligt nok:u:=RandomVector(3);DotProduct(u,v);Skalarproduktet to s\303\270jlevektorer eller mellem to r\303\246kkevektorer kan f\303\245s ved brug af punktum ligesom matrixproduktet. Men som vi skal se, skal man v\303\246re varsom.Her tager vi som eksempel de to r\303\246kkevektorer v og w:Da de to vektorer forst\303\245et som 1x3-matricer ikke kan ganges sammen, tillader Maple at v.w tolkes som skalarproduktet af v og w:v.w;Derimod vil u.v af Maple blive opfattet som matrixproduktet mellem en 3x1-matrix (s\303\270jlevektoren u) og en 1x3-matrix v (r\303\246kkevektoren v). Dvs. at resultatet bliver en 3x3-matrix:u.v;I omvendt r\303\246kkef\303\270lge f\303\245s derimod skalarproduktet, som man kan forvente efter samme tolkning af vektorerne som matricer: v.u;whattype(%);Resultatet er et tal (en skalar). Hvis vi omdanner til matricer f\303\270r multiplikationen, er output en 1x1-matrix: convert(v,Matrix).convert(u,Matrix);whattype(%);1x1-matricens eneste element:%%[1,1];Invers matrixDen inverse til en invertibel matrix A f\303\245s s\303\245ledes:A^(-1);Man kan ogs\303\245 bruge MatrixInverse:MatrixInverse(A);Det korteste er selvf\303\270lgelig at taste A^(-1), hvilket ogs\303\245 kan anbefales. For matricer, der ikke har nogen invers, vil MatrixInverse returnere den s\303\245kaldte Moore-Penrose-pseudoinverse matrix, se herom i hj\303\246lpen til MatrixInverse.Kontrol af den inverse best\303\245r i udregning af LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiYtRiw2JVEiQUYnRjhGWi1JI21vR0YkNi1RMSZJbnZpc2libGVUaW1lcztGJy9GZW5RJ25vcm1hbEYnLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGYnAtSSVtc3VwR0YkNiVGaW4tRiM2JS1GXW82LVEqJnVtaW51czA7RidGYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnAvRmFwUSwwLjIyMjIyMjJlbUYnL0ZkcEZecS1JI21uR0YkNiRRIjFGJ0Zgb0Zgby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGYG9GK0Zgbw==, der gerne skulle give enhedsmatricen:IdentityMatrix(3);Vi pr\303\270ver:A.A^(-1);Vi fik enhedsmatricen, hvilket viser, at den inverse blev regnet rigtigt ud.Nulrum for matrixLad A v\303\246re matricenA:=Matrix([[1,1,-2,1,2],[0,0,2,2,1]]);Nulrummet for A er m\303\246ngden af de vektorer x, for hvilke A.x = 0 (nulvektoren).En basis for nulrummet for A f\303\245s ved brug af NullSpace:NA:=NullSpace(A);Flere kopier af nulvektorenKontrol af at de 3 vektorer tilh\303\270rer nulrummet kan g\303\270res ved udregning af Av for hver vektor i NA. Dette kan evt g\303\270res i et hug vha. map, der her bruger funktionen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEidkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKCZzcmFycjtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJBRidGL0YyLUY2Ni1RIi5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRisvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnRjk= p\303\245 hver vektor i NA:res:=map( v->A.v, NA);Bem\303\246rk, at der i m\303\246ngden ovenfor er 3 kopier af nulvektoren. De 3 vektorer har forskellige placeringer i computerens hukommelse, men de 3 vektorers elementer er alle nul. Her er matrix-datastrukturen lidt speciel, idet vi jo eksempelvis har{a,a,a};Resultatet af f\303\270lgende er 3 gange true:map(v->Equal(v,<0,0>),res);Maskinadresserne for de 3 nulvektorer:map(addressof,res);Mere om dette i afsnittet om Equal og Copy nedenfor.Ved "h\303\245ndkraft" kan en basis for nulrummet findes s\303\245ledes:Vi danner f\303\270rst totalmatricen for det homogene system Ax = 0:T:=<A|<0,0>>;eller endnu kortere:T:=<A|0,0>;Vi beder om reduceret echelonform:RRA:=ReducedRowEchelonForm(T);Frie variable er x2, x4 og x5.Vi nedskriver det tilsvarende ligningssystem:GenerateEquations(RRA,[x[1],x[2],x[3],x[4],x[5]]);Vi l\303\270ser for de basale variable vha. solve: solve(%,{x[1],x[3]});Her f\303\245s s\303\245 l\303\270sningerne til Ax = 0 udtrykt ved de frie variable x2, x4 og x5:subs(%,<x[1],x[2],x[3],x[4],x[5]>);Ved brug af proceduren ExpandVector, som vi lavede ovenfor, f\303\245sExpandVector(%);En basis for nulrummet udg\303\270res nu af de 3 vektorer, der st\303\245r klinet op ad LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNigtSSVtc3ViR0YkNiUtRiw2JVEieEYnRjhGWi1GIzYkLUkjbW5HRiQ2JFEiMkYnL0ZlblEnbm9ybWFsRidGZW8vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1JI21vR0YkNi1RIixGJ0Zlby8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y6LyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUZqbjYlRlxvLUYjNiQtRmJvNiRRIjRGJ0Zlb0Zlb0Znb0Zqby1Gam42JUZcby1GIzYkLUZibzYkUSI1RidGZW9GZW9GZ29GZW9GK0Zlbw==. Basisvektorerne kan pilles ud herfra ved f\303\270lgende kommando, om man \303\270nsker:indets(%,Vector);LinearSolve vil producere en anden (men liges\303\245 god) basis: LinearSolve(A,<0,0>,free=x):ExpandVector(%);Basisvektorerne kan pilles ud som ovenfor:NA2:=indets(%,Vector);At de to baser er lige gode kan kontrolleres ved at vise, at vektorerne i den ene kan skrives som en linearkombination af vektorerne i den anden og omvendt. Og dette kan evt. g\303\270res s\303\245ledes:V:=Matrix(convert(NA,list));U:=Matrix(convert(NA2,list));Vi l\303\270ser matrixligningen VX = U for X, hvorved vi unders\303\270ger om vektorerne i NA2 kan skrives som en linearkombination af vektorerne i NA:ReducedRowEchelonForm(<V|U>);X:=%[1..3,4..6];Der var alts\303\245 en l\303\270sning, og vi bem\303\246rker, at X er invertibel, s\303\245 VX = U medf\303\270rer LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNictRiw2JVEiVkYnRjhGWi1JI21vR0YkNi1RIj1GJy9GZW5RJ25vcm1hbEYnLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGYnAtRiM2Ji1GLDYlUSJVRidGOEZaLUZdbzYtUTEmSW52aXNpYmxlVGltZXM7RidGYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnAvRmFwUSYwLjBlbUYnL0ZkcEZecS1JJW1zdXBHRiQ2JS1GLDYlUSJYRidGOEZaLUYjNiUtRl1vNi1RKiZ1bWludXMwO0YnRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wL0ZhcFEsMC4yMjIyMjIyZW1GJy9GZHBGXHItSSNtbkdGJDYkUSIxRidGYG9GYG8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmBvRitGYG9GK0Zgbw==. Alts\303\245 kan vektorerne i NA ogs\303\245 skrives som en linearkombination af vektorerne i NA2.Equal og CopyHvis to vektorer (eller matricer) er lavet uafh\303\246ngigt af hinanden, s\303\245 vil de v\303\246re anbragt to forskellige steder i maskinens hukommelse, selv hvis de har samme st\303\270rrelse og samme elementer:u:=<1,2,3>: v:=<1,2,3>:addressof(u), addressof(v);Vi danner m\303\246ngden best\303\245ende af de to ens udseende vektorer:{u,v};Men bem\303\246rk til sammenligning, at her fjernes dubletter:{ a, a, 7,9,0,0,0};hvilket skyldes, at objekterne 0, 7, 9 og a kun opbevares \303\251t sted (som dog er sessionsafh\303\246ngigt).Heldigvis skaber dette forhold for matricer intet problem ved regninger som f.eks. u - v:u-v;Proceduren Equal fra LinearAlgebra-pakken vil afsl\303\270re om vektorerne er elementvis ens - og derfor ens i matematisk henseende:Equal(u,v);Men hverken evalb eller is vil anerkende de to vektorer som ens:evalb(u=v);is(u=v);Matricer og vektorer er lidt specielle, hvad ang\303\245r opbevaring i hukommelsen.
Ved s\303\246dvanlige tilordninger i Maple: m:=7; n:=m;vil m 'pege' p\303\245 7, og n vil ogs\303\245 pege p\303\245 7, idet fuld evaluering af m i den anden tilordning g\303\270r, at n faktisk s\303\246ttes til 7.m,n;Laver vi m om, vil n ikke \303\246ndres:m:=8: n;Lad nu matricen M v\303\246re givet vedM:=Matrix([[1,2],[3,4]]);Til senere brug noterer vi os dens maskinadresse:addressof(M);Definerer vi nu N til at v\303\246re M, vil N faktisk blive eksakt det samme som M: Hvis den ene af de to \303\246ndres, s\303\245 g\303\270r den anden ogs\303\245:N:=M;Vi \303\246ndrer p\303\245 M:M[1,1]:=76:og vi ser, at N ogs\303\245 \303\246ndres:M,N;Vi \303\246ndrer p\303\245 N:N[2,1]:=-99:og ogs\303\245 M \303\246ndres:M,N;De to matricer har begge stadig den adresse den oprindelige matrix M havde:addressof(M),addressof(N);Vi ser, at M og N peger p\303\245 samme matrix. Denne matrix fik ved sin f\303\270rste definition en plads i hukommelsen. Denne plads bevares ved elementvise \303\246ndringer. Vil man derfor lave en kopi N af matricen M, s\303\245ledes at man kan \303\246ndre p\303\245 M uden dermed at \303\246ndre p\303\245 N, m\303\245 man bruge Copy. Hermed skaber man en ny matrix med en anden plads i hukommelsen. Denne matrix f\303\245r ved sin skabelse de samme elementer som M:N:=Copy(M);Nu har den nyligt skabte matrix N f\303\245et en ny maskinadresse:addressof(M),addressof(N);og den ene af de to kan \303\246ndres uden at den anden \303\246ndres:M[1,1]:=45:M,N;addressof(M),addressof(N);Basis for underrum. S\303\270jlerum.Lad der v\303\246re givet nogle vektorer (det kunne v\303\246re s\303\270jlerne i en matrix):v1,v2,v3,v4:=<1,-3,2,-4>,<-3,9,-6,12>,<2,-1,4,2>,<-4,5,-3,7>;Vi vil udtynde den givne m\303\246ngde af vektorer til en basis for Span( v1, v2, v3, v4 ):bas:=Basis([v1,v2,v3,v4]);Resultatet af f\303\270lgende viser, at v1, v3 og v4 optr\303\246der i den fundne basis, og ikke v2 (resultatet 1 betyder ja, 0 betyder nej):map(ListTools:-Occurrences,[v1,v2,v3,v4],bas);H\303\245ndkraft:V:=Matrix([v1,v2,v3,v4]);GaussianElimination(V);Pivoteringss\303\270jlerne er 1, 3 og 4. Alts\303\245 er {v1, v3, v4} en basis for Span( v1, v2, v3, v4 ), som ogs\303\245 var det resultat Basis fandt. Vil vi blot finde en basis for s\303\270jlerummet for V (alts\303\245 en basis for Span( v1, v2, v3, v4 ) ), men ikke n\303\270dvendigvis en basis, der er fundet ved udtynding, kan vi bruge ColumnSpace:ColumnSpace(V);Denne specielt simple basis for s\303\270jlerummet er opn\303\245et ved at lave s\303\270jleoperationer p\303\245 V, hvilket jo svarer til r\303\246kkeoperationer p\303\245 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEiVkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRIlRGJ0YyRjVGMkY1LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1JI21vR0YkNi1RIi5GJy9GNlEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkgvJSlzdHJldGNoeUdGSC8lKnN5bW1ldHJpY0dGSC8lKGxhcmdlb3BHRkgvJS5tb3ZhYmxlbGltaXRzR0ZILyUnYWNjZW50R0ZILyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGVy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRidGRA==En s\303\270jleoperation \303\246ndrer ikke p\303\245 det underrum, der udsp\303\246ndes af s\303\270jlerne: res:=Transpose(ReducedRowEchelonForm(Transpose(V)));Basis for s\303\270jlerummet best\303\245r nu af de n s\303\270jler, der er forskellige fra nulvektoren.n er rangen af V ( = rangen af res):n:=Rank(res);Column(res,1..n);Rang af matrixRangen af en matrix kan f.eks. defineres som det maksimale antal line\303\246rt uafh\303\246ngige s\303\270jler (eller r\303\246kker!) i matricen, alts\303\245 som dimensionen af s\303\270jlerummet. Rangen kan ogs\303\245 defineres som antal fra nulr\303\246kken forskellige r\303\246kker i en echelonform for matricen.Den findes let i Maple. I vores eksempel tager vi udgangspunkt i matricen A (fra tidligere):A:=Matrix([[1,1,-2,1,2],[0,0,2,2,1]]);Rank(A);Det kunne vi godt selv se. Nu stabler vi to matricer ovenp\303\245 hinanden:M:=<A,-3*A>;og har hermed en 4x5-matrix. Dens rang er:Rank(M);hvilket ikke b\303\270r overraske.Kontrol:GaussianElimination(M);Antal fra nulr\303\246kken forskellige r\303\246kker i echelonformen er 2, hvilket stemmer med Maples svar p\303\245 rangen.En basis for s\303\270jlerummet best\303\245r da ogs\303\245 netop af 2 vektorer:ColumnSpace(M);DeterminanterVi tager en tilf\303\246ldig 3x3-matrix:A:=RandomMatrix(3);Determinanten af A findes simpelthen ved kommandoenDeterminant(A);L\303\246rebogsdefinitioner af determinantenDeterminanten kan defineres p\303\245 flere m\303\245der. Her illustreres to af disse.Metode 1:Nogle l\303\246reb\303\270ger definerer determinanten rekursivt ved udvikling i komplementer langs f\303\270rste r\303\246kke. Undermatricen, der f\303\245s ved at stryge r\303\246kke 1 og s\303\270jle 2 i A, erMinor(A,1,2,output=matrix);Underdeterminanten, der f\303\245s ved at tage determinanten af denne matrix erMinor(A,1,2);Her f\303\270lger s\303\245 en definition af determinanten. Definitionen er rekursiv: Determinanten af en nxn-matrix defineres ud fra kendskabet til determinanter af orden (n-1)x(n-1) ved udvikling langs f\303\270rste r\303\246kke:add((-1)^(1+i)*A[1,i]*det(Minor(A,1,i,output=matrix)),i=1..3);Vi har brugt en af Maple ukendt funktion det. Det er gjort for at vi kan se, hvad der foreg\303\245r.Vi ved allerede, hvordan 2x2-matricer udregnes, s\303\245 determinanten af A f\303\245s til:eval(%,det=Determinant);Eller lidt mere direkte:add((-1)^(1+i)*A[1,i]*Minor(A,1,i),i=1..3);Metoden er (i sin fulde brug) beregningsm\303\246ssigt en katastrofe, hvis matricen ikke er ret lille eller ret speciel. Pr\303\270v at udregne, hvor mange 2x2-determinanter beregningen af en 10x10-determinant resulterer i!Den anden metode, der bruges som definition i Jens Eisings fortrinlige l\303\246rebog i Line\303\246r Algebra, er i beregningsm\303\246ssig henseende ogs\303\245 ubrugelig for store matricer.Det skal bem\303\246rkes, at der ikke er nogen, der taler for brugen af disse metoder p\303\245 andet end matricer af en meget beskeden st\303\270rrelse.Metode 2: Vi laver en funktion nInv, der finder antal inversioner i en permutation (her givet ved en liste af tallene 1, 2, 3, ..., n angivet i den permuterede r\303\246kkef\303\270lge):nInv:=proc(L::list(posint))
local n,k,j,res;
res:=0;
n:=nops(L);
for k from 1 to n do
for j from k+1 to n do
if L[j]<L[k] then res:=res+1 end if
end do
end do;
res
end proc:Vi tester p\303\245 permutationen [2,3,1,5,4], der har 3 inversioner: (2,1), (3,1) og (5,4):nInv([2,3,1,5,4]);Proceduren sgn giver fortegnet for en permutation, hvilket blot er LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNiYtSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjwvJSlzdHJldGNoeUdGPC8lKnN5bW1ldHJpY0dGPC8lKGxhcmdlb3BHRjwvJS5tb3ZhYmxlbGltaXRzR0Y8LyUnYWNjZW50R0Y8LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSy1JI21uR0YkNiRRIjFGJ0Y3LyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJ0Y3RjctRiM2JS1JI21pR0YkNiVRInFGJy8lJ2l0YWxpY0dRJXRydWVGJy9GOFEnaXRhbGljRidGZW5GaG4vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRlJGNw==, hvis q er antallet af inversioner i den givne permutation.sgn:=proc(L::list(posint)) (-1)^nInv(L) end proc:Test:sgn([2,3,1,5,4]);Nu defineres determinanten af en nxn matrix med elementer LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiYUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRI2lqRidGMkY1RjJGNS8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUkjbW9HRiQ2LVEifkYnL0Y2USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSC8lKXN0cmV0Y2h5R0ZILyUqc3ltbWV0cmljR0ZILyUobGFyZ2VvcEdGSC8lLm1vdmFibGVsaW1pdHNHRkgvJSdhY2NlbnRHRkgvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZXRkAvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnRkQ=som f\303\270lgende sum af produkter: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYxLUkjbWlHRiQ2JVEkZGV0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNigtRiw2JVEiQUYnRi9GMi8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSlyZWFkb25seUdGMS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnL0YzUSdub3JtYWxGJ0ZILUkjbW9HRiQ2LVEiPUYnRkgvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRlAvJSlzdHJldGNoeUdGUC8lKnN5bW1ldHJpY0dGUC8lKGxhcmdlb3BHRlAvJS5tb3ZhYmxlbGltaXRzR0ZQLyUnYWNjZW50R0ZQLyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGaW4tSSttdW5kZXJvdmVyR0YkNictRks2LVEmJlN1bTtGJ0ZIRk5GUS9GVEYxRlUvRlhGMS9GWkYxRmVuL0ZoblEmMC4wZW1GJy9GW29RLDAuMTY2NjY2N2VtRictRiM2Ki1GLDYlUSJwRidGL0YyRkotSSVtc3ViR0YkNiUtRiw2JVEiU0YnRi9GMi1GIzYoLUYsNiVRIm5GJ0YvRjJGPUZARkNGRUZILyUvc3Vic2NyaXB0c2hpZnRHUSIwRidGPUZARkNGRUZILUYsNjZRIUYnLyUnZmFtaWx5R1ErTW9ub3NwYWNlZEYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR0ZQRi8vJSp1bmRlcmxpbmVHRlAvJSpzdWJzY3JpcHRHRlAvJSxzdXBlcnNjcmlwdEdGUC9GPlEsWzAsMTI4LDEyOF1GJ0ZALyUnb3BhcXVlR0ZQLyUrZXhlY3V0YWJsZUdGMS9GREZQLyUpY29tcG9zZWRHRlAvJSpjb252ZXJ0ZWRHRlAvJStpbXNlbGVjdGVkR0ZQLyUscGxhY2Vob2xkZXJHRlAvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHRlAvRkZRLE1hcGxlfklucHV0RidGMkZlbi8lLGFjY2VudHVuZGVyR0ZQLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHUSQ1LjBGJy8lJmRlcHRoR0Zncy8lKmxpbmVicmVha0dRJWF1dG9GJy1JJW1zdXBHRiQ2JS1GNjYkLUYjNiktRks2LVEqJnVtaW51czA7RidGSEZORlFGU0ZVRldGWUZlbi9GaG5RLDAuMjIyMjIyMmVtRicvRltvRlt1LUkjbW5HRiQ2JFEiMUYnRkhGPUZARkNGRUZIRkgtRiw2JVEoc2duKHApfkYnRi9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHRltxLUZLNi1RMSZJbnZpc2libGVUaW1lcztGJ0ZIRk5GUUZTRlVGV0ZZRmVuRmVvL0Zbb0Zmby1GXW82Jy1GSzYtUSomUHJvZHVjdDtGJ0ZIRk5GUUZib0ZVRmNvRmRvRmVuRmVvRmdvLUYjNiotRiw2JVEiaUYnRi9GMkZKRl11Rj1GQEZDRkVGSEZmcEZlbkZgc0Zicy1GX3A2JS1GLDYlUSJhRidGL0YyLUYjNipGYXYtRks2LVEiLEYnRkhGTi9GUkYxRlNGVUZXRllGZW5GZW8vRltvUSwwLjMzMzMzMzNlbUYnLUZfcDYlRltwLUYjNihGYXZGPUZARkNGRUZIRmlwRj1GQEZDRkVGSEZpcEY9RkBGQ0ZFRkg= hvor p genneml\303\270ber alle permutationer det:=proc(A::'Matrix'(square))
local n,S;
n:=LinearAlgebra:-ColumnDimension(A);
S:=combinat:-permute(n);
add(sgn(p)*mul(A[i,p[i]],i=1..n),p=S)
end proc:Test p\303\245 matricen ovenfor:det(A);Vi laver en noget st\303\270rre matrix (dog jo egentligt en beskeden st\303\270rrelse):A:=RandomMatrix(9);Maples egen Determinant finder meget hurtigt resultatet (under det m\303\245lelige):t0:=time():Determinant(A);
time()-t0;Men l\303\246rebogsdefinition 2 tager meget l\303\246ngere tid:t0:=time():det(A);
time()-t0;Det hj\303\246lper voldsomt p\303\245 determinantberegninger, at r\303\246kkeoperationer af formen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiUkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRImlGJ0YyRjVGMkY1LyUvc3Vic2NyaXB0c2hpZnRHUSIwRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GNlEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkgvJSlzdHJldGNoeUdGSC8lKnN5bW1ldHJpY0dGSC8lKGxhcmdlb3BHRkgvJS5tb3ZhYmxlbGltaXRzR0ZILyUnYWNjZW50R0ZILyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGV0YrLUZBNi1RIitGJ0ZERkZGSUZLRk1GT0ZRRlMvRlZRLDAuMjIyMjIyMmVtRicvRllGaG4tRi82JVEia0YnRjJGNS1GQTYtUScmc2RvdDtGJ0ZERkZGSUZLRk1GT0ZRRlMvRlZRJjAuMGVtRicvRllGYW8tRiw2JUYuLUYjNiUtRi82JVEiakYnRjJGNUYyRjVGPS8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRidGRA== ikke \303\246ndrer p\303\245 determinantens v\303\246rdi. Egenv\303\246rdier og egenvektorerEksempel 1 (matrix med p\303\246ne egenv\303\246rdier)Lad matricen A v\303\246re givet vedA:=Matrix([[7,54,36],[8,-24,-3],[-20,90,23]]);Egenv\303\246rdierne for en kvadratisk matrix A er r\303\270dderne i det karakteristiske polynomium LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEkZGV0RicvJSdpdGFsaWNHUSV0cnVlRicvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYlLUYjNiktRiw2JlEiQUYnRi9GMkY1LUkjbW9HRiQ2LlEoJm1pbnVzO0YnRjIvRjZRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZILyUpc3RyZXRjaHlHRkgvJSpzeW1tZXRyaWNHRkgvJShsYXJnZW9wR0ZILyUubW92YWJsZWxpbWl0c0dGSC8lJ2FjY2VudEdGSC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRlctRiw2JlEnJiM5NTU7RicvRjBGSEYyRkQtRkE2LlEnJnNkb3Q7RidGMkZERkZGSUZLRk1GT0ZRRlMvRlZRJjAuMGVtRicvRllGXG8tRiw2JlEiRUYnRi9GMkY1LyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJ0ZERjJGRC1GLDY2USFGJy8lJ2ZhbWlseUdRK01vbm9zcGFjZWRGJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdGSEYvLyUqdW5kZXJsaW5lR0ZILyUqc3Vic2NyaXB0R0ZILyUsc3VwZXJzY3JpcHRHRkgvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJ0Zhby8lJ29wYXF1ZUdGSC8lK2V4ZWN1dGFibGVHRjEvJSlyZWFkb25seUdGSC8lKWNvbXBvc2VkR0ZILyUqY29udmVydGVkR0ZILyUraW1zZWxlY3RlZEdGSC8lLHBsYWNlaG9sZGVyR0ZILyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR0ZIL0YzUSxNYXBsZX5JbnB1dEYnRjVGYW9GRA==, hvor E er enhedsmatricen. Dette kan bestemmes ved kommandoenpol:=Determinant(A-lambda*IdentityMatrix(3));Men der findes ogs\303\245 en procedure CharacteristicPolynomial, der direkte giver polynomiet LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiYtRiw2JVEkZGV0RidGOEZaLUkjbW9HRiQ2LVEwJkFwcGx5RnVuY3Rpb247RicvRmVuUSdub3JtYWxGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRmJwLUkobWZlbmNlZEdGJDYkLUYjNiZGKy1GIzYnRistRiM2Ji1GLDYlUSkmbGFtYmRhO0YnL0Y5RjdGYG8tRl1vNi1RMSZJbnZpc2libGVUaW1lcztGJ0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcC1GLDYlUSJFRidGOEZaRmBvLUZdbzYtUSgmbWludXM7RidGYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnAvRmFwUSwwLjIyMjIyMjJlbUYnL0ZkcEZcci1GLDYlUSJBRidGOEZaRmBvRitGYG9GYG9GYG9GK0Zgbw== (proceduren CharacteristicMatrix giver matricen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNidGKy1GIzYmLUYsNiVRKSZsYW1iZGE7RicvRjlGNy9GZW5RJ25vcm1hbEYnLUkjbW9HRiQ2LVExJkludmlzaWJsZVRpbWVzO0YnRl9vLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGZXAtRiw2JVEiRUYnRjhGWkZfby1GYm82LVEoJm1pbnVzO0YnRl9vRmVvRmdvRmlvRltwRl1wRl9wRmFwL0ZkcFEsMC4yMjIyMjIyZW1GJy9GZ3BGX3EtRiw2JVEiQUYnRjhGWkZfb0YrRl9v) :CharacteristicPolynomial(A,lambda);En detaljeN\303\245r Determinant st\303\245r omkring LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKCZtaW51cztGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUScmIzk1NTtGJy9GMEY9RjkvJTBmb250X3N0eWxlX25hbWVHUSlfY3N0eWxlMkYnRjk= (alts\303\245 uden E ganget p\303\245 lambda), s\303\245 opfattes det som brugeren formodentlig \303\270nsker:Determinant(A-lambda);Men bem\303\246rk, at lambda ikke bliver trukket fra i diagonalen her:A-lambda;hvilket generelt heller ikke er heldigt, da lambda i princippet kunne st\303\245 for en matrix.Men selvf\303\270lgelig bliver lambda fratrukket i diagonalen her:A-lambda*IdentityMatrix(3);Er tallet lambda derimod konkret, s\303\245 bliver det fratrukket i diagonalen.:A-5;Egenv\303\246rdierne for matricen A er r\303\270dderne i karakterpolynomiet:solve( pol=0, lambda);Egenv\303\246rdierne kan bestemmes direkte ved brug af Eigenvalues:Eigenvalues(A);Egenv\303\246rdier og egenvektorer bestemmes p\303\245 \303\251n gang ved brug af Eigenvectors. Output er som default en f\303\270lge best\303\245ende af en vektor indholdende egenv\303\246rdierne og en matrix, hvis s\303\270jler er egenvektorer h\303\270rende til egenv\303\246rdierne og angivet i samme r\303\246kkef\303\270lge:Eigenvectors(A);Tilf\303\270jer man det valgfri argument output=list, f\303\245s resultatet som en liste af lister hver indeholdende egenv\303\246rdien, dens algebraiske multiplicitet og en basis for egenrummet:Eigenvectors(A,output=list);Det er selvf\303\270lgelig n\303\270dvendigt, at output fra Eigenvectors best\303\245r af b\303\245de egenv\303\246rdier og egenvektorer, idet man skal v\303\246re i stand til at afg\303\270re hvilken egenvektor h\303\270rer til hvilken egenv\303\246rdi. Man kan ikke stole p\303\245, at egenv\303\246rdierne kommer i samme r\303\246kkef\303\270lge n\303\246ste gang man pr\303\270ver!Dette betyder ogs\303\245, at man ikke skal fastl\303\246gge sine egenv\303\246rdier ved brug af Eigenvalues og derefter bestemme egenvektorer vha. Eigenvectors. N\303\245r output som i default-tilf\303\246ldet er en f\303\270lge (h\303\251r af l\303\246ngde 2), kan man lave flere tilordninger p\303\245 \303\251n gang, her 2:ev,P:=Eigenvectors(A);Hermed har ev f\303\245et tilordnet vektoren af egenv\303\246rdier og P er tilordnet matricen, hvis s\303\270jler er egenvektorer. En enkelt af egenvektorerne (eksempelvis nr. 2) kan plukkes ud fra P s\303\245ledes:Column(P,2);Eksempel 2 (matrix med "grimme" egenv\303\246rdier)Det er ikke normalt at egenv\303\246rdier og egenvektorer for en matrix er "p\303\246ne", bortset fra matricer lavet af matematikl\303\246rere.Lad os som eksempel betragte matricenA:=Matrix([[0,1,3,-4],[1,2,-5,1],[3,1,-4,6],[-1,2,-1,1]] );Egenv\303\246rdierne for matricen A kan som i Eksempel 1 beregnes ved brug af Eigenvalues, men svaret fylder meget, s\303\245 efter vi har set, hvor dejligt indviklede de ser ud, kan vi erstatte semikolon med et kolon, s\303\245ledes at output ikke vises. Herefter vil vi n\303\270jes med at vise decimalbr\303\270kstiln\303\246rmelserne:Eigenvalues(A):evalf(%); Alternativt kan man lave en decimalbr\303\270ksversion af matricen f\303\270r man finder dens egenv\303\246rdier. I s\303\245 fald bruger Maple en numerisk metode til bestemmelse af egenv\303\246rdierne. Bl.a. af den grund skal man ikke regne med, at egenv\303\246rdierne kommer i samme r\303\246kkef\303\270lge som f\303\270r.Vi har anbragt simplify udenom kommandoen for at omdanne komplekst udseende decimaltal som -6.27+0.I til -6.27:simplify(Eigenvalues(evalf(A)));Egenvektorerne f\303\245s som i Eksempel 1 ved brug af Eigenvectors. Den giver en f\303\270lge best\303\245ende af en vektor med egenv\303\246rdierne og en matrix, hvis s\303\270jler er egenvektorer. Vi gemmer de to i henholdsvis w og P. Outputtet fylder virkelig meget, s\303\245 det undertrykkes i f\303\270rste omgang:w,P:=Eigenvectors(A): Decimalbr\303\270ksversionen af wevalf(w);fnormal bruges i n\303\246ste linie faktisk kun for at reducere antal viste decimaler, s\303\245 decimalbr\303\270ksversionen af P ikke fylder s\303\245 meget:evalf(P): fnormal~(%,5);I stedet for kommandoen fnormal~(%,5); (som ikke kan bruges i Maple 12 og tidligere) kan man bruge map(fnormal, %, 5); Her f\303\270lger de tilsvarende beregninger med udgangspunkt i en decimalbr\303\270ksversion af A. Her bruger Maple en numerisk metode til bestemmelse af egenv\303\246rdier og egenvektorer:fw,fP:=Eigenvectors(evalf(A)):simplify(fw);Igen bruges fnormal for at skabe overblik:fnormal~(simplify(fP),4);I det numeriske tilf\303\246lde s\303\270rger Maple for at egenvektorerne f\303\245r l\303\246ngde 1 (l\303\246ngde = 2-norm):F\303\270rst kontrolleres dette udsagn p\303\245 f\303\270rste s\303\270jle i fP:Norm(Column(fP,1),2);Her kontrolleres l\303\246ngderne af alle 4 s\303\270jler:seq(Norm(Column(fP,k),2),k=1..4);Eller s\303\245ledes:Norm~([Column(fP,1..4)],2);Ved beregningen af P ovenfor blev ikke brugt en numerisk metode, s\303\245 s\303\270jlel\303\246ngderne er ikke (n\303\270dvendigvis) 1:seq(Norm(Column(evalf(P),k),2),k=1..4);Eksempel 3 (en ikke diagonaliserbar matrix)Lad A v\303\246re matricenA:=Matrix([[12,4,-8],[-13,-2,10],[6,3,-3]]);Eigenvalues(A);Egenv\303\246rdien 2 har alts\303\245 algebraisk multiplicitet to (hvilket ses af, at Maple n\303\246vner egenv\303\246rdien 2 to gange).Den geometriske multiplicitet (og ogs\303\245 den algebraiske) fremg\303\245r af Eigenvectors(A,output=list);Vi ser, at den geometriske multiplicitet af egenv\303\246rdien 2 kun er \303\251n, da basis for egenrummet best\303\245r af \303\251n vektor. Alts\303\245 er A ikke diagonaliserbar.Bruger vi default-output:Eigenvectors(A);ser vi, at en af s\303\270jlerne h\303\270rende til egenv\303\246rdien 2 best\303\245r af lutter nuller. Dette betyder igen, at den geometriske multiplicitet af egenv\303\246rdien 2 kun er 1. Lidt mere direkte ser vi det samme ved at findeNullSpace( A-2 );Bem\303\246rk, at Maple vil tolke A - 2 p\303\245 samme m\303\245de som A-2E, hvor E er enhedsmatricen.Nulrummet for A-2E er alts\303\245 \303\251ndimensional, s\303\245 den geometriske multiplicitet af egenv\303\246rdien 2 er 1.Flere matrixopbygningsmetoderDiagonalMatrix laver en diagonalmatrix ved input af diagonalen som en liste eller en vektor:DiagonalMatrix([2,a,-sqrt(7)]);men den kan ogs\303\245 lave en blokdiagonalmatrix:Q1:=Matrix([[0,1],[1,0]]):
Q2:=Matrix([[1,2],[3,4]]):DiagonalMatrix([Q1,Q2,7]);En Matrix kan opbygges ud fra mindre matricer (eller vektorer) vha. Matrix:W:=Matrix([[Q1,Q1^(-1)],[Q2,Q2^(-1)]]);Og den modsatte vej:SubMatrix(W,2..3,1..4);eller endnu lettere:W[2..3,1..4];<Q1|Q2> = Matrix([Q1,Q2]);EnhedsmatricenEnhedsmatricen kan man f\303\245 f.eks. ved brug af IdentityMatrix:IdentityMatrix(2);Bem\303\246rk igen f\303\270lgende forskel. L\303\246gger man q til en matrix A, s\303\245 returnerer LinearAlgebra-pakken denne sum uevalueret, n\303\245r q ikke er et konkret tal eller en matrix. Men er q et konkret tal l\303\246gges det til diagonalen i A:A+q; A-7;A-lambda*IdentityMatrix(3);Hessematricen, Jacobimatricen, EksponentialmatricenI VectorCalculus-pakken ligger procedurer til beregning af Hesse- og Jacobi-matricerne:Hesse:=VectorCalculus[Hessian](f(x,y),[x,y]);Jacob:=VectorCalculus[Jacobian]([f(x,y),g(x,y)],[x,y]);Den funktion H, der sender (x, y) over i Hesse kan laves vha. unapply. I det abstrakte tilf\303\246lde som her, hvor f ikke er blevet defineret, m\303\245 vi dog f\303\270rst konvertere diff til D. Dette er ikke n\303\270dvendigt i et konkret tilf\303\246lde, hvor differentiationerne jo bliver udf\303\270rt allerede ved definitionen af Hesse: H:=unapply(convert(Hesse,D),x,y):H(p,q);Jacob kan selvf\303\270lgelig p\303\245 samme m\303\245de laves til en funktion J.Lad Q v\303\246re matricen Q:=Matrix([[0,1],[-1,0]]);Eksponential matricen LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNictSSttdW5kZXJvdmVyR0YkNictSSNtb0dGJDYvUSYmU3VtO0YnL0ZCUS5bMTQ0LDE0NCwxNDRdRicvRmVuUSdub3JtYWxGJy9JK21zZW1hbnRpY3NHRiRRJmluZXJ0RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lKXN0cmV0Y2h5R0Y6LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGOi8lLm1vdmFibGVsaW1pdHNHRjovJSdhY2NlbnRHRjcvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4xNjY2NjY3ZW1GJy1GIzYmLUYsNiVRIm5GJ0Y4RlotRl1vNi1RIj1GJ0Zib0Znb0Zpby9GXHBGN0ZdcC9GYHBGNy9GYnBGN0ZjcC9GZnBRLDAuMjc3Nzc3OGVtRicvRmlwRmdxLUkjbW5HRiQ2JFEiMEYnRmJvRmJvLUYsNiVRKCZpbmZpbjtGJ0Y4RlpGY3AvJSxhY2NlbnR1bmRlckdGN0YrLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHUSQ1LjBGJy8lJmRlcHRoR0Znci8lKmxpbmVicmVha0dRJWF1dG9GJy1JJm1mcmFjR0YkNigtRiM2Ji1JJW1zdXBHRiQ2JS1GLDYlUSJ0RidGOEZaRl1xLyUxc3VwZXJzY3JpcHRzaGlmdEdGXHItRl1vNi1RMSZJbnZpc2libGVUaW1lcztGJ0Zib0Znb0Zpb0ZjcUZdcEZkcUZlcUZjcEZlcC9GaXBGZ3AtRmZzNiUtRiw2JVEiUUYnRjhGWkZdcUZbdEZiby1GIzYmRistRiM2JUZdcS1GXW82LVEiIUYnRmJvRmdvRmlvRmNxRl1wRmRxRmVxRmNwL0ZmcFEsMC4xMTExMTExZW1GJy9GaXBGXnVGYm9GK0Ziby8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZXUvJSliZXZlbGxlZEdGN0Zib0YrRmJv f\303\245s ved brug af MatrixExponential:M:=MatrixExponential(Q,t); Eksponentialmatricen er l\303\270sning til LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2NlEhRicvJSdmYW1pbHlHUStNb25vc3BhY2VkRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EsWzAsMTI4LDEyOF1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRicvJSdvcGFxdWVHRjcvJStleGVjdXRhYmxlR0Y6LyUpcmVhZG9ubHlHRjcvJSljb21wb3NlZEdGNy8lKmNvbnZlcnRlZEdGNy8lK2ltc2VsZWN0ZWRHRjcvJSxwbGFjZWhvbGRlckdGNy8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRLE1hcGxlfklucHV0RicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNitGKy1GIzYlLUkmbWZyYWNHRiQ2KC1GLDYlUSJkRidGOEZaLUYjNiUtRiw2JVEjZHRGJ0Y4RlpGOEZaLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZbcC8lKWJldmVsbGVkR0Y3RkQvRmVuUSdub3JtYWxGJy1GLDYlUSJNRidGOEZaLUkjbW9HRiQ2LVEiPUYnRmBwLyUmZmVuY2VHRjcvJSpzZXBhcmF0b3JHRjcvJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGaXEtRiw2JVEiUUYnRjhGWi1GZnA2LVEiLkYnRmBwRmlwRltxRl1xRl9xRmFxRmNxRmVxL0ZocVEmMC4wZW1GJy9GW3JGY3JGYnBGREZgcEYrRkRGYHA= :diff~(M,t)=M.Q;Bem\303\246rk den elementvise brug af diff, der i Maple 13 og senere kan opn\303\245s ved diff~.Overbestemte line\303\246re ligningssystemerBetragt f\303\270lgende ligningssystem best\303\245ende af 4 ligninger med 3 ubekendte. S:={x+2*y-4*z=5,3*x+y-z=0,5*x-y+z=3,y+z=-4};Slist:=convert(S,list);Koefficientmatricen og h\303\270jresiden kan pilles ud som f\303\270lger:A,b:=GenerateMatrix(Slist,[x,y,z]);LinearSolve(A,b);Systemet har alts\303\245 ingen l\303\270sninger. Men den vektor v = (x, y, z), der minimerer l\303\246ngden (2-normen) af residualvektoren Av-b findes ved \303\251n af f\303\270lgende to kommandoer:LeastSquares(S,{x,y,z});v:=LeastSquares(A,b);Residualvektoren er (vi transponerer af pladshensyn):Transpose(A.v-b);Den s\303\246dvanlige euklidiske norm (2-normen) af denne vektor er:Norm(A.v-b,2);linalg-pakkenForuden pakken LinearAlgebra er der ogs\303\245 den gamle line\303\246r algebra-pakke linalg. Man b\303\270r v\303\246re opm\303\246rksom p\303\245 dens eksistens, da fejlindtastning i LinearAlgebra-pakken (eksempelvis matrix skrevet med sm\303\245t) kan have uheldige konsekvenser. Derfor dette korte afsnit.I hj\303\246lpen for linalg st\303\245r der: "Important: The linalg package has been deprecated. Use the superseding packages, LinearAlgebra and VectorCalculus, instead."restart;with(linalg):Definition af matrix og vektor. Matrixprodukt. Invers. Transposition. Matricer kan defineres ved brug af proceduren matrix. Man kan opgive st\303\270rrelsen som de to f\303\270rste argumenter, og en liste (eller en liste af lister) som tredie argument:A := matrix(3 , 3, [0,1,3,1,2,-5,3,1,-4] );Hvis man kun giver Maple en liste af lister, tolker Maple dette som en liste af r\303\246kkerne i en matrix. Matricen A kan alts\303\245 ogs\303\245 defineres s\303\245ledes:matrix([[0,1,3],[1,2,-5],[3,1,-4]] );En tredie mulighed er som tredie argument til matrix at angive en funktion af to variable, der ved input (i, j) leverer matricens (i, j)-element:matrix(2,7,(i,j)->i^2-j);N\303\246vnes matricen AA;s\303\245 ser vi ikke andet end navnet. linalg-matricer evalueres kun til navnet, akkurat som for funktioner og procedurer (og for tabeller og arrays, se kapitel 14). Fuld evaluering kan dog tvinges igennem ved hj\303\246lp af evalm:evalm(A);Den inverse til en invertibel matrix og den transponerede til en vilk\303\245rlig matrix f\303\245s ved simple kommandoer:inverse(A);transpose(A);Den inverse kan ogs\303\245 f\303\245s ved kommandoen:evalm(A^(-1)): # Output undertryktEn vektor kan defineres ved brug af proceduren vector, men en vektor kan ogs\303\245 blot opfattes som en matrix med kun \303\251n s\303\270jle eller kun \303\251n r\303\246kkeVi definerer nu v som en vektor og b som en s\303\270jlevektor. Vi lader B v\303\246re en tilf\303\246ldig valgt matrix:v:=vector([13,26,65]);b := matrix(3 , 1 , [13,26,65] );
B:=randmatrix(3,3,entries=rand(-9..9));Produkterne Av, Ab og AB f\303\245s enten vha. multiply eller vha. &* efterfulgt af evalm:evalm(A&*v),evalm(A&*b),multiply(A,v),multiply(A,b); Bem\303\246rk, at outputtet har forskellig type: A&*v er en vektor, mens A&*b er en matrix (s\303\270jlevektor).evalm(A&*B);En vektor kan ganges p\303\245 en matrix fra venstre. Her opfattes den som en r\303\246kkevektor:evalm(v&*A),evalm(transpose(b)&*A);Kapiteloversigt1. Indledning.2. Differentiation3. Integration4. Gr\303\246nsev\303\246rdi, Taylorpolynomium, Sum, F\303\270lge og Produkt5. L\303\270sning af Ligninger6. Differentialligninger7. Line\303\246r Algebra8. Diverse Maplepakker9. Plotning10. Algebraisk Manipulation11. Tal i Maple12. Strenge, Variabelnavne, Evaluering13. Funktioner14. Tabeller og Arrays, Manipulation af Datastrukturer15. Programmering i Maple16. Egne Biblioteker og Pakker