Matrixregning i Maple
Matrixregning i Maple
Matrixregning i Maple
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
estart;<br />
Vi skal benytte os intensivt af pakken LinearAlgebra i kurset LinAlg (dermiod vil vi undgå pakken linalg!).<br />
Derfor vil vi altid begynde med:<br />
> with(LinearAlgebra);<br />
[&x, Add, Adjoint, BackwardSubstitute, BandMatrix, Basis, BezoutMatrix, BidiagonalForm, BilinearForm,<br />
CharacteristicMatrix, CharacteristicPolynomial, Column, ColumnDimension, ColumnOperation,<br />
ColumnSpace, CompanionMatrix, ConditionNumber, ConstantMatrix, ConstantVector, Copy,<br />
CreatePermutation, CrossProduct, DeleteColumn, DeleteRow, Determinant, Diagonal, DiagonalMatrix,<br />
Dimension, Dimensions, DotProduct, EigenConditionNumbers, Eigenvalues, Eigenvectors, Equal,<br />
ForwardSubstitute, FrobeniusForm, GaussianElimination, GenerateEquations, GenerateMatrix,<br />
GetResultDataType, GetResultShape, GivensRotationMatrix, GramSchmidt, HankelMatrix,<br />
HermiteForm, HermitianTranspose, HessenbergForm, HilbertMatrix, HouseholderMatrix,<br />
IdentityMatrix, IntersectionBasis, IsDefinite, IsOrthogonal, IsSimilar, IsUnitary, JordanBlockMatrix,<br />
JordanForm, LA_Main, LUDecomposition, LeastSquares, LinearSolve, Map, Map2, MatrixAdd,<br />
MatrixExponential, MatrixFunction, MatrixInverse, MatrixMatrixMultiply, MatrixNorm, MatrixPower,<br />
MatrixScalarMultiply, MatrixVectorMultiply, MinimalPolynomial, Minor, Modular, Multiply,<br />
NoUserValue, Norm, Normalize, NullSpace, OuterProductMatrix, Permanent, Pivot, PopovForm,<br />
QRDecomposition, RandomMatrix, RandomVector, Rank, RationalCanonicalForm,<br />
ReducedRowEchelonForm, Row, RowDimension, RowOperation, RowSpace, ScalarMatrix,<br />
ScalarMultiply, ScalarVector, SchurForm, SingularValues, SmithForm, SubMatrix, SubVector,<br />
SumBasis, SylvesterMatrix, ToeplitzMatrix, Trace, Transpose, TridiagonalForm, UnitVector,<br />
VandermondeMatrix, VectorAdd, VectorAngle, VectorMatrixMultiply, VectorNorm, VectorScalarMultiply,<br />
ZeroMatrix, ZeroVector, Zip]<br />
><br />
<strong>Matrixregning</strong> i <strong>Maple</strong><br />
Matricer af størrelse op til 4x4 indtastes nemmest med brug af menuen til venstre. Klik på det ønskede<br />
format under Matrix og benyt tabulatorknappen:<br />
> A[1]:=;<br />
é 2 5ù<br />
ê ú<br />
A1 := ê 0 1ú<br />
ê ú<br />
ê ú<br />
ë 4 -2û<br />
> A[2]:=;<br />
> A[3]:=;<br />
> A[4]:=;<br />
A 2 :=<br />
é<br />
ê<br />
ê<br />
ë<br />
1 0 0ù<br />
ú<br />
0 -1 2<br />
ú<br />
û<br />
A3 := [ 4 4 5]
é 2ù<br />
ê ú<br />
ê 8ú<br />
A4 := ê ú<br />
ê ú<br />
ê 0ú<br />
ê ú<br />
ê ú<br />
ë -4û<br />
> A[5]:=;<br />
é 1<br />
ê<br />
A5 := ê 1<br />
ê<br />
ê<br />
ë 0<br />
0<br />
2<br />
0<br />
0ù<br />
ú<br />
1ú<br />
ú<br />
ú<br />
1û<br />
Matrixmultiplikation indikeres med punktum (og ikke med stjerne!):<br />
> A[1].A[2];<br />
hvis ikke et produkt har mening protesterer <strong>Maple</strong> med<br />
> A[1].A[3];<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
2 -5 10ù<br />
ú<br />
0 -1 2ú<br />
ú<br />
ú<br />
4 2 -4û<br />
Error, (in LinearAlgebra:-MatrixMatrixMultiply) first matrix column<br />
dimension (2) second matrix row dimension (1)<br />
Fordi den associative regel gælder giver det mening at udregne<br />
> A[4].A[3].A[5].A[1].A[2];<br />
> A[4].A[3].A[1].A[2].A[5];<br />
Lad os se på<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
104 -60 120ù<br />
ú<br />
416 -240 480ú<br />
ú<br />
ú<br />
0 0 0ú<br />
ú<br />
ú<br />
-208 120 -240û<br />
28 -56 28ù<br />
ú<br />
112 -224 112ú<br />
ú<br />
ú<br />
0 0 0ú<br />
ú<br />
ú<br />
-56 112 -56û
B:=;<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
B := ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
0<br />
1<br />
2<br />
1<br />
2<br />
1<br />
3<br />
1<br />
3<br />
1<br />
3<br />
1ù<br />
ú<br />
2ú<br />
ú<br />
ú<br />
0ú<br />
ú<br />
ú<br />
ú<br />
1ú<br />
2<br />
ú<br />
û<br />
Vi ganger med skalar med<br />
> 2*B;<br />
adderer med<br />
> B+B;<br />
og ganger med<br />
> B.B;<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
0<br />
1<br />
1<br />
0<br />
1<br />
1<br />
5<br />
12<br />
1<br />
6<br />
5<br />
12<br />
Men kan også tage potenser (idet matricen er kvadratisk!)<br />
2<br />
3<br />
2<br />
3<br />
2<br />
3<br />
2<br />
3<br />
2<br />
3<br />
2<br />
3<br />
5<br />
18<br />
5<br />
18<br />
4<br />
9<br />
ù<br />
1ú<br />
ú<br />
ú<br />
ú<br />
0ú<br />
ú<br />
ú<br />
ú<br />
1<br />
ú<br />
ú<br />
û<br />
ù<br />
1ú<br />
ú<br />
ú<br />
ú<br />
0ú<br />
ú<br />
ú<br />
ú<br />
1<br />
ú<br />
ú<br />
û<br />
1ù<br />
ú<br />
4ú<br />
ú<br />
1ú<br />
ú<br />
4ú<br />
ú<br />
ú<br />
1ú<br />
2<br />
ú<br />
û
B^2;<br />
> B^100;<br />
é<br />
ê<br />
ë<br />
é<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
5<br />
12<br />
1<br />
6<br />
5<br />
12<br />
5<br />
18<br />
5<br />
18<br />
16751759576924895028120263260463021039414047963208544665474661022676619659155<br />
54443218625005908841390855596504818378095309206079572628589330530791428456448 ,<br />
4<br />
9<br />
100510557461549370168721579562778126236483518577935382290334494555650770871077<br />
326659311750035453048345133579028910268571855236477435771535983184748570738688 ,<br />
22335679435899860037493684347284028052551841262781426823842540167696411056363ù<br />
ú ,<br />
72590958166674545121854474128673091170793745608106096838119107374388571275264<br />
é<br />
ê<br />
ë<br />
50255278730774685084360789781389063118241526393548729562124183476808464318095<br />
217772874500023635365563422386019273512381236824318290514357322123165713825792 ,<br />
2355716190505063363329412021002612333667588309256875576958021343581397576361<br />
10208103492188607907760785424344653445892870476139919867860499474523392835584 ,<br />
8375879788462447514060131630231510519706998697397775454701718513140384425497 ù<br />
ú<br />
36295479083337272560927237064336545585396872804053048419059553687194285637632û<br />
é<br />
ê<br />
ë<br />
100510557461549370168721579562778126236483518577935382290334494555650770871077<br />
217772874500023635365563422386019273512381236824318290514357322123165713825792 ,<br />
150765836192324055253082369344167189354725510762322035018544805634493077424059<br />
326659311750035453048345133579028910268571855236477435771535983184748570738688 ,<br />
33503519153849790056240526520926042078827906950529119104873130180411391367907ù<br />
ú<br />
72590958166674545121854474128673091170793745608106096838119107374388571275264û<br />
> evalf(B^100);<br />
Matricer må gerne have symbolske indgange<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
1ù<br />
ú<br />
4ú<br />
ú<br />
1ú<br />
ú<br />
4ú<br />
ú<br />
ú<br />
1ú<br />
2<br />
ú<br />
û<br />
0.3076923077 0.3076923077 0.3076923077ù<br />
ú<br />
0.2307692308 0.2307692308 0.2307692308ú<br />
ú<br />
ú<br />
0.4615384615 0.4615384615 0.4615384615û<br />
> C:=;<br />
é 1<br />
ê<br />
C := ê 0<br />
ê<br />
ê<br />
ë d<br />
c<br />
2<br />
-2<br />
2 ù<br />
ú<br />
-3ú<br />
ú<br />
ú<br />
-1û<br />
û<br />
,<br />
ù<br />
ú<br />
û
B.C;<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
1<br />
2 d<br />
1<br />
2<br />
1 1<br />
+<br />
2 2 d<br />
-1<br />
3<br />
1 2<br />
c +<br />
2 3<br />
1 1<br />
c -<br />
2 3<br />
-3ù<br />
ú<br />
2 ú<br />
ú<br />
ú<br />
0 ú<br />
ú<br />
ú<br />
ú<br />
-1ú<br />
2<br />
ú<br />
û<br />
Visse matricer er forudprogrammerede i <strong>Maple</strong>. Vigtigst er IdentityMatrix<br />
> E:=IdentityMatrix(3);<br />
> E.B;<br />
E :=<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
0<br />
1<br />
2<br />
1<br />
2<br />
1 0 0ù<br />
ú<br />
0 1 0ú<br />
ú<br />
ú<br />
0 0 1û<br />
Det er muligt - men vi har endnu ikke set hvordan - at beregne den inverse matrix til visse matricer:<br />
> MatrixInverse(B);<br />
> B^(-1);<br />
men ikke til alle...<br />
> MatrixInverse();<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ê<br />
ê<br />
ë<br />
1<br />
3<br />
1<br />
3<br />
1<br />
3<br />
1ù<br />
ú<br />
2ú<br />
ú<br />
ú<br />
0ú<br />
ú<br />
ú<br />
ú<br />
1ú<br />
2<br />
ú<br />
û<br />
-2 0 2ù<br />
ú<br />
3 3 -3ú<br />
ú<br />
ú<br />
0 -2 2û<br />
-2 0 2ù<br />
ú<br />
3 3 -3ú<br />
ú<br />
ú<br />
0 -2 2û<br />
Error, (in LinearAlgebra:-LA_Main:-MatrixInverse) singular matrix
><br />
Illustrere lineære afbildninger på R^2<br />
De følgende tre kommandoer skal benyttes ved løsning af ugeopgave 1.2:<br />
> futhark:=[,,,,];<br />
futhark :=<br />
é<br />
ê<br />
ê<br />
ë<br />
é<br />
ê<br />
ê<br />
ë<br />
0ù<br />
ú ,<br />
0<br />
ú<br />
û<br />
0 é ù<br />
ê ú ,<br />
ê<br />
ë<br />
3<br />
ú<br />
û<br />
1 é ù<br />
ê ú ,<br />
ê<br />
ë<br />
2<br />
ú<br />
û<br />
0 é ù<br />
ê ú ,<br />
ê<br />
ë<br />
1<br />
ú<br />
û<br />
1 é ù<br />
ê ú<br />
ê<br />
ë<br />
0<br />
ú<br />
û<br />
> tegn:=(LL,farve)->plot([seq([LL[i][1],LL[i][2]],i=1..5)],scaling=constr<br />
ained,view=[-10..10,-10..10],thickness=3,color=farve);<br />
tegn := ( LL, farve)<br />
® plot æ é<br />
ç<br />
seqæ é LLi , LLi ù , i = 1 .. 5ö<br />
ù<br />
ê<br />
çè<br />
ç ê ú ÷ ú<br />
ê è ë 1 2<br />
ë<br />
û ø ú<br />
û<br />
view = [ -10 .. 10, -10 .. 10],<br />
thickness = 3, color = farve ö ÷<br />
÷ø<br />
ù<br />
ú<br />
ú<br />
û<br />
, scaling = constrained,<br />
> illustrer:=(A,farve)->plots[display]([tegn(futhark,black),tegn(map(unap<br />
ply(lin(A,x),x),futhark),farve),plots[textplot]([8,10,A[1,1]],font=[hel<br />
vetica,bold ,24]),plots[textplot]([10,10,A[1,2]],font=[helvetica,bold<br />
,24]),plots[textplot]([8,8,A[2,1]],font=[helvetica,bold<br />
,24]),plots[textplot]([10,8,A[2,2]],font=[helvetica,bold ,24])]);<br />
illustrer := ( A, farve)<br />
® plotsdisplay ([tegn( futhark, black),<br />
tegn( map( unapply( lin( A, x),<br />
x),<br />
futhark),<br />
farve),<br />
plotstextplot( [ 8, 10, A1, 1],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 10, 10, A1, 2],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 8, 8, A2, 1],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 10, 8, A2, 2],<br />
font = [ helvetica, bold, 24]<br />
)])<br />
Med disse tre kommanoder kan man illustrere effekten af at tage en lineær afbildning givet ved en 2x2 matrix<br />
på figuren der ligner et oldnordisk R. Vi har fx<br />
> S:=; illustrer(S,green);<br />
S :=<br />
é<br />
ê<br />
ê<br />
ë<br />
1 0ù<br />
ú<br />
0 -1<br />
ú<br />
û<br />
Warning, unable to evaluate the function to numeric values in the region;<br />
see the plotting command's help page to ensure the calling sequence is<br />
correct
-10<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
5<br />
1<br />
0<br />
0<br />
-1<br />
Figuren i sort er den oprindelige, og den i grøn fremkommer heraf ved at tage den anførte lineære afbildning<br />
på hvert punkt i den sorte figur. Vi har fx også<br />
> F:=; illustrer(F,red);<br />
é 3 0ù<br />
F := ê ú<br />
ê<br />
ë<br />
0 3<br />
ú<br />
û<br />
Warning, unable to evaluate the function to numeric values in the region;<br />
see the plotting command's help page to ensure the calling sequence is<br />
correct<br />
10
-10<br />
-5<br />
Det er ikke nødvendigt for at løse opgaven, men lad os forklare hvordan illutsrer virker. Vi har noteret 5<br />
hjørner i den oprindelige figur...<br />
><br />
><br />
><br />
> tegn(futhark,black);<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
5<br />
3<br />
0<br />
0<br />
3<br />
10
lin:=(A,x)->A.x;<br />
> S:=;<br />
> lin(S,);<br />
-10<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
lin := ( A, x)<br />
® A . x<br />
S :=<br />
é<br />
ê<br />
ê<br />
ë<br />
1 0ù<br />
ú<br />
0 -1<br />
ú<br />
û<br />
é<br />
ê<br />
ê<br />
ë<br />
> Slin:=unapply(lin(S,x),x);<br />
Slin := x ® ( Matrix( 1..2,1..2,[ ... ], [ ... ], datatype = anything, storage = rectangular, order = C_order ) .<br />
x<br />
> Slin();<br />
><br />
> map(Slin,futhark);<br />
é<br />
ê<br />
ê<br />
ë<br />
1ù<br />
ú<br />
-1<br />
ú<br />
û<br />
1ù<br />
ú<br />
-1<br />
ú<br />
û<br />
5<br />
10
tegn(%,green);<br />
-10<br />
é 0ù<br />
é 0ù<br />
é 1ù<br />
é 0ù<br />
ê ú , ê ú , ê ú , ê ú ,<br />
ê<br />
ë<br />
0<br />
ú ê<br />
û ë<br />
-3<br />
ú ê<br />
û ë<br />
-2<br />
ú ê<br />
û ë<br />
-1<br />
ú<br />
û<br />
1<br />
é<br />
é ù<br />
ê<br />
ê ú<br />
ê<br />
ê<br />
ë<br />
0<br />
ú<br />
ë<br />
û<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
> illustrer:=(A,farve)->plots[display]([tegn(futhark,black),tegn(map(unap<br />
ply(lin(A,x),x),futhark),farve),plots[textplot]([8,10,A[1,1]],font=[hel<br />
vetica,bold ,24]),plots[textplot]([10,10,A[1,2]],font=[helvetica,bold<br />
,24]),plots[textplot]([8,8,A[2,1]],font=[helvetica,bold<br />
,24]),plots[textplot]([10,8,A[2,2]],font=[helvetica,bold ,24])]);<br />
illustrer := ( A, farve)<br />
® plotsdisplay ([tegn( futhark, black),<br />
tegn( map( unapply( lin( A, x),<br />
x),<br />
futhark),<br />
farve),<br />
plotstextplot( [ 8, 10, A1, 1],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 10, 10, A1, 2],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 8, 8, A2, 1],<br />
font = [ helvetica, bold, 24]<br />
),<br />
plotstextplot( [ 10, 8, A2, 2],<br />
font = [ helvetica, bold, 24]<br />
)])<br />
> illustrer(S,green);<br />
5<br />
ù<br />
ú<br />
ú<br />
û<br />
10
-10<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
> millustrer:=(A,farve)->plots[display]([tegn(futhark,black),tegn(map(una<br />
pply(lin(A,x),x),futhark),farve)]);<br />
millustrer := ( A, farve)<br />
® plotsdisplay ( [ tegn( futhark, black),<br />
tegn( map( unapply( lin( A, x),<br />
x),<br />
futhark),<br />
farve)<br />
])<br />
> millustrerfusk:=(fusk,farve)->plots[display]([tegn(futhark,black),tegn(<br />
fusk,farve)]);<br />
millustrerfusk := ( fusk, farve)<br />
® plotsdisplay( [ tegn( futhark, black),<br />
tegn( fusk, farve)<br />
] )<br />
> fuski:=array(1..2,1..2);<br />
> millustrer(,red);<br />
fuski := array( 1 .. 2, 1 .. 2, [] )<br />
5<br />
1<br />
0<br />
0<br />
-1<br />
10
-10<br />
> millustrer(,green);<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
5<br />
10
-10<br />
10<br />
5<br />
0<br />
0<br />
> millustrerfusk(map(x->x+,futhark),cyan);<br />
-5<br />
-5<br />
-10<br />
5<br />
10
-10<br />
-5<br />
> millustrerfusk([,,,,],magenta);<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
5<br />
10
-10<br />
> plots[display](fuski);<br />
-5<br />
10<br />
5<br />
0<br />
0<br />
-5<br />
-10<br />
Error, (in plots/display_array) first argument must be a plot structure<br />
or list, set or array of plot structures<br />
><br />
5<br />
10