Linjära avbildningar

Kap 6.1-2 Linjära transformationer

(R^2)

Quit[]

Definiera hörnen i en enhetskvadrat.

p0={0,0};
p1={1,0};
p2={1,1};
p3={0,1};
kvadrat={p0,p1,p2,p3,p0}
Graphics[Line[kvadrat],Axes->True,PlotRange->{{-0.5,1.5},{-0.5,1.5}}]

Skalning

Ett exempel är en avbildning som fördubblar varje vektor. Avbildningen kan göras på olika sätt. Först genom att helt enkelt multiplicera med två.

t[x_]:=2x; (*skala med 2 *)
kvadrat
kvadrat2=Map[t,kvadrat]
Graphics[{Line[kvadrat],Arrow[{p0,p1}],Arrow[{p0,p3}],Red,Line[kvadrat2],Arrow[Map[t,{p0,p1}]],Arrow[Map[t,{p0,p3}]]},Axes->True,PlotRange->{{-0.5,2},{-0.5,2}}]

Motsvarande standardmatris A = [T(𝕖1) T( 𝕖2)]

A=(({{2, 0}, {0, 2}}));
tA[x_]:=A.x;
kvadrat3=Map[tA,kvadrat]

Graphics[{Line[kvadrat],Red,Line[kvadrat3]},Axes->True,PlotRange->{{-0.5,2},{-0.5,2}}]

Bilderna visar att avbildningen är densamma.

Här är en generell skalningsmatris som skalar med en faktor x i x - led och en faktor y i y - led.

aK[x_,y_,v_]:=(({{x, 0}, {0, y}})).v;

Manipulate[Grid[{{MatrixForm[(({{x, 0}, {0, y}}))]},{Graphics[Line[aK[x,y,#]&/@kvadrat],Axes->True,PlotRange->{{-5,5},{-5,5}}]}}],{{x,1},-5,5,.1},{{y,1},-5,5,.1}]

Rotation

En annan linjär avbildning är att rotera figuren. Rotera enhetskvadraten 60° moturs.

Arot=(({{1/2, -(Sqrt[3])/2}, {(Sqrt[3])/2, 1/2}}));

Koordinatmatrisen som beskriver kvadraten har fel format för att utföra transformationen  A x

kvadrat
MatrixForm[%]

Den måste först transponeras

Transpose[kvadrat];
MatrixForm[%]

Och sedan kan vi multiplicera

nyaPunkter=Arot.Transpose[kvadrat]
MatrixForm[nyaPunkter]

Och sedan kan vi transponera resultatet

Transpose[nyaPunkter]

Eller allt på en gång:

Transpose[Arot.Transpose[kvadrat]]

Att utföra matrismultiplikatinen genom mappning (Map)

?Map

Jag definierar en funktion som utför rotationen

tArot[x_]:=Arot.x;

Jag utför matrismultiplikationen genom att mappa funktionen tArot  på kooordinatmatrisen

kvadrat3=Map[tArot,kvadrat]

Graphics[{Line[kvadrat],Red,Line[kvadrat3]},Axes->True,PlotRange->{{-1,1.5},{-0.5,2}}]

Rotation med godtycklig vinkel

afi[ϕ_]:=(({{Cos[ϕ], -Sin[ϕ]}, {Sin[ϕ], Cos[ϕ]}}));

tAfi[x_,ϕ_]:=afi[ϕ].x;

Manipulate[Graphics[{Line[kvadrat],Red,Line[tAfi[#,ϕ]& /@kvadrat]},Axes->True,PlotRange->{{-1.5,1.5},{-1.5,1.5}}],{ϕ,0,2π}]

Vinkelrät projektion på x-axeln

aX:=(({{1, 0}, {0, 0}}));
tA[x_]:=aX.x;
kvadrat5=Map[tA,kvadrat];
Graphics[{Line[kvadrat],Red,Thick,Line[kvadrat5]},Axes->True,PlotRange->{{-0.5,2},{-0.5,2}}]

Skevning

aS[x_,y_]:=(({{1, x}, {y, 1}}));
tS[x_,y_,v_]:=aS[x,y].v;
kvadrat5=Map[tS,kvadrat];

Manipulate[Grid[{{{MatrixForm[(({{1, x}, {y, 1}}))]}},{Graphics[{Line[kvadrat],Red,Thick,Line[tS[x,y,#]&/@kvadrat]},Axes->True,PlotRange->{{-2,2},{-2,2}}]}}
],{{x,0},-1,1},{{y,0},-1,1}]

Uppgift 3

Skapa en transformationsmatris som förstorar ett objekt två gånger i x - led och sedan roterar det 60° moturs.

skala=(({{2, 0}, {0, 1}}));
rotera=(({{1/2, -(Sqrt[3])/2}, {(Sqrt[3])/2, 1/2}}));

Det går bra att multiplicera ihop matriserna till en enda transformationsmatris.  I vilken ordning ska matriserna stå?

rs=rotera.skala;
MatrixForm[rs]

tA[x_]:=rotera.(skala.x);

kvadrat5=Map[tA,kvadrat];

Graphics[{Line[kvadrat],Red,Thick,Line[kvadrat5]},Axes->True,PlotRange->{{-0.5,2},{-0.5,2}}]

Avbildningar i (R^3)

vertex={1,1,1};

Graphics3D[Cuboid[{0,0,0},vertex],PlotRange->1.2]

Projektion på xy - planet

Matris slås upp i kursboken

A=(({{1, 0, 0}, {0, 1, 0}, {0, 0, 0}}))

Graphics3D[Cuboid[{0,0,0},A.vertex],PlotRange->1.2]

Reflektion i xy - planet

A=(({{1, 0, 0}, {0, 1, 0}, {0, 0, -1}}));

Graphics3D[{Cuboid[{-1,-1,0},{1,1,0}],Cuboid[{0,0,0},vertex]},PlotRange->1.2,AxesLabel->{x,y,z}]
Graphics3D[{Cuboid[{-1,-1,0},{1,1,0}],Cuboid[{0,0,0},A.vertex]},PlotRange->1.2]

Rotation kring z - axeln

Definierar en pyramid

p0={0,0,0};
p1={1,0,0};
p2={1,1,0};
p3={0,1,0};
p4={1/2,1/2,1};

parea0=Polygon[{p0,p3,p2,p1}];
parea1=Polygon[{p0,p1,p4}];
parea2=Polygon[{p1,p2,p4}];
parea3=Polygon[{p2,p3,p4}];
parea4=Polygon[{p3,p0,p4}];

Rotationsmatris från kursboken

r[ϕ_]:=(({{Cos[ϕ], -Sin[ϕ], 0}, {Sin[ϕ], Cos[ϕ], 0}, {0, 0, 1}}));

q0=r[Pi/4].p0;
q1=r[Pi/4].p1;
q2=r[Pi/4].p2;
q3=r[Pi/4].p3;
q4=r[Pi/4].p4;

qarea0=Polygon[{q0,q3,q2,q1}];
qarea1=Polygon[{q0,q1,q4}];
qarea2=Polygon[{q1,q2,q4}];
qarea3=Polygon[{q2,q3,q4}];
qarea4=Polygon[{q3,q0,q4}];

g1=Graphics3D[{qarea0,qarea1,qarea2,qarea3,qarea4,parea0,parea1,parea2,parea3,parea4},PlotRange->{{-1,1},{-1,1},{-1,1}}]