Predavanja: linearna algebra

Osnovne funkcije za delo z linearnimi preslikavami in matrikami

Predstavitev matrik in vektorjev

Matriko lahko podamo po vrsticah kot seznam seznamov. Na primer, matriko

A = (({{1, 2, 3}, {4, 5, 6}}))

predstavimo z

A={{1,2,3},{4,5,6}}

Z MatrixForm prikažemo matriko v matrični obliki:

A//MatrixForm

Vektor je seznam svojih komponent:

{x,y,z}

Seštevanje in množenje

Matriki seštejmo s +

(({{1, 2, 3}, {4, 5, 6}}))+(({{10, 20, 30}, {40, 50, 60}}))//MatrixForm

Matriki lahko prištejemo število:

(({{1, 2, 3}, {4, 5, 6}}))+B//MatrixForm

Pozor! Množenje matrik se zapiše s piko . in ne z *, ki množi posamične elemente matrike!

(({{a, b}, {c, d}}))*(({{e, f}, {g, h}}))//MatrixForm

(({{a, b}, {c, d}})).(({{e, f}, {g, h}}))//MatrixForm

Množenje vektorjev:

{a,b,c}*{x,y,z}

{a,b,c}.{x,y,z}

Podobno se inverzne matrike ne računa kot (A^(-1)) ampak z Inverse[A]

(((({{a, b}, {c, d}})))^(-1))//MatrixForm

Inverse[(({{a, b}, {c, d}}))]//MatrixForm

Potenco matrike se izračuna z MatrixPower:

MatrixPower[(({{a, b}, {c, d}})),2]//MatrixForm

Običajno potenciranje deluje na vsakem elementu posebej:

(((({{a, b}, {c, d}})))^2)//MatrixForm

Rotacije, zrcaljenja in raztegi

Matrika zasuka:

RotationMatrix[ϕ]//MatrixForm

Zrcaljenje čez premico z normalo (u,v) dobimo z ReflectionMatrix

ReflectionMatrix[{u,v}]//MatrixForm

Kako pojasnite Conjugate? Mathematica računa s kompleksnimi števili. S FullSimplify ji lahko dopovemo, da računamo z realnimi števili:

FullSimplify[ReflectionMatrix[{u,v}],Assumptions->{u∈(Reals), v∈(Reals)}]//MatrixForm

Razteg v smeri x za faktor a in v smeru y za faktor b:

ScalingMatrix[{a,b}]//MatrixForm

Identiteta:

IdentityMatrix[5]//MatrixForm

Diagonalna matrika z dano diagonalo:

DiagonalMatrix[{a,b,c,d,e,f}]//MatrixForm

Transpozicija matrike:

Transpose[{{a,b,c},{d,e,f}}]//MatrixForm

Skalarni, vektorski in mešani produkt

Skalarni produkt pišemo s piko, enako kot množenje matrik:

{a,b,c}.{x,y,z}

Vektorski produkt pišemo s Cross ali ×:

Cross[{a,b,c},{x,y,z}]

{a,b,c}\[Cross]{x,y,z}

Sklarni, vektorski in mešani produkt (kot determinanta)

Mešani produkt je kar determinanta:

({a,b,c}\[Cross]{x,y,z}).{u,v,w}==Det[{{a,b,c},{x,y,z},{u,v,w}}]//Simplify

Mešani produkt je volumen paralepipeda, ki ga raztezajo vektorji:

Graphics3D[{Parallelepiped[{0,0,0},{{1,2,0},{0,3,-1},{0,0,1}}]}]

Sistem linearnih enačb in determinanta

Sistem enačb A x == b rešimo z LinearSolve[A,b]

LinearSolve[(({{1, 2, 3}, {4, 5, 6}, {7, 8, 0}})),{1,1,1}]

Determinanto izračunamo z Det:

Det[(({{1, 2, 3}, {4, 5, 6}, {7, 8, 0}}))]

Lastni vektorji in lastne vrednosti

Lastne vrednosti:

Eigenvalues[(({{1, 2, 3}, {4, 5, 6}, {7, 8, 0}}))]

Če potrebujemo lastne vrednosti in lastne vektorje, uporabimo Eigensystem:

Eigensystem[(({{1, 2, 3}, {4, 5, 6}, {7, 8, 0}}))]

Grafični prikaz linearne preslikave (((Reals))^2)->(((Reals))^2)

Primer linearne preslikave:

B={{1,2},{-1,1}}

Delovanje B prikažemo tako, da preslikamo mrežo:

Graphics[{
Table[InfiniteLine[{{x,0},{x,1}}],{x,-5,5}],
Table[InfiniteLine[{{0,y},{1,y}}],{y,-5,5}]
}]

Graphics[{
Table[InfiniteLine[{B.{x,0},B.{x,1}}],{x,-5,5}],
Table[InfiniteLine[{B.{0,y},B.{1,y}}],{y,-5,5}]
}]

Sestavimo funkcijo, ki to počne za poljubno transformacijo:

ClearAll[mreza]
mreza[A_]:=
{
GrayLevel[0.8],
Table[InfiniteLine[{A.{i,0}, A.{i,1}}],{i,-5,5}],
Table[InfiniteLine[{A.{0,j},A.{1,j}}],{j,-5,5}],
{Blue,Arrowheads[Large], Arrow[{{0,0},A.{1,0}}],RGBColor[0,0.6,0], Arrow[{{0,0},A.{0,1}}]}
}

Graphics[mreza[{{1,2},{-1,0}}],
AspectRatio->Automatic]

Delovanje lahko prikažemo tudi tako, da preslikamo kak nesimetričen lik, na primer črko F:

Graphics[{Opacity[0.5],Orange,Polygon[{{0,0},{1,0},{1,1},{3,1},{3,2},{1,2},{1,3},{2,3},{4,3},{4,4},{0,4},{0,0}}]},Axes->True]

ClearAll[crkaF,crkaFkoordinate]
crkaFkoordinate=0.25*{{0,0},{1,0},{1,1},{3,1},{3,2},{1,2},{1,3},{2,3},{4,3},{4,4},{0,4},{0,0}}
crkaF[A_]:=
{Opacity[0.5],Orange,
Polygon[A.#&/@crkaFkoordinate]}

Graphics[crkaF[B],Axes->True]

Prikažemo lahko tudi lastne podprostore, pri čemer moramo paziti, da ne rišemo kompleksnih podprostorov:

ClearAll[realenVektorQ]
realenVektorQ[{x_,y_}]:=Im[x]==0∧Im[y]==0

ClearAll[lastniPodprostori]
lastniPodprostori[A_]:=
{Red,Arrowheads[Large],
Function[v,InfiniteLine[{{0,0},v}]]/@Select[Eigenvectors[A],realenVektorQ]
}

Graphics[lastniPodprostori[ReflectionMatrix[{1,2}]],Axes->True]

Zasuk nima realnih lastnih vektorjev:

Graphics[lastniPodprostori[RotationMatrix[π/6]],Axes->True]

Ima pa kompleskne:

lastniPodprostori[RotationMatrix[π/6]]

Vse skupaj zložimo v Manipulate:

Manipulate[
Graphics[{ 
mreza[Transpose[{u,v}]],
crkaF[Transpose[{u,v}]],
lastniPodprostori[Transpose[{u,v}]]
},
PlotRange->{{-5,5},{-5,5}},Axes->True],
{{u,{1,0}},Locator},
{{v,{0,1}},Locator}
]