>   

../L/L7maple.mws

L 12 to 3.10.02

Alustukset

>    restart:

>    with(LinearAlgebra):
with(linalg):

>    with(plots):setoptions(scaling=constrained):setoptions3d(axes=boxed,orientation=[-30,50]):

>    alias(Inv=MatrixInverse,Id=IdentityMatrix,Diag=DiagonalMatrix):

>    alias(rref=ReducedRowEchelonForm):alias(ref=GaussianElimination):
alias(Id=IdentityMatrix):

>   

Lineaarikuvaukset tasossa ja niiden havannollistaminen

Maple 8:n funktio plots[arrow] on maanmainio! Tehdään sitä käyttävä apufunktio, jolla piirretään sininen nuoli origosta vektorin u määräämään pisteeseen ja punainen nuoli O:sta kuvapisteeseen Au.

>    kuvakulma:=(A,u)->display(arrow(u,shape=arrow,color=blue),arrow(A.u,shape=arrow,color=red),scaling=constrained,title="Lahto:sininen, kuva:punainen");

kuvakulma := proc (A, u) options operator, arrow; display(arrow(u,shape = arrow,color = blue),arrow(A.u,shape = arrow,color = red),scaling = constrained,title =
kuvakulma := proc (A, u) options operator, arrow; display(arrow(u,shape = arrow,color = blue),arrow(A.u,shape = arrow,color = red),scaling = constrained,title =

Esim . 1

>    A:=<<3,1>|<-2,0>>;

A := Matrix(%id = 16537276)

>    u:=<-1,1>; v:=<2,1>;

u := Vector(%id = 16543656)

v := Vector(%id = 15632260)

>    kuvakulma(A,u);kuvakulma(A,v);

[Maple Plot]

[Maple Plot]

Toisella yrittämällä osuimme ominaisvektoriin. Kuvan mukaan näyttäisi siltä, että vastaava ominaisarvo = 2.

Miten hakisimme yleisemmin? Otetaan (sinisiä) yksikkövektoreita sopivan tiheästi ja kuvataan A:lla.

>    display(seq(kuvakulma(A,<cos(Theta),sin(Theta)>),Theta=[seq(k*2*Pi/10,k=0..10)]));

[Maple Plot]

>    n:=30:display(seq(kuvakulma(A,<cos(Theta),sin(Theta)>),Theta=[seq(k*2*Pi/n,k=0..n)]),insequence=true,scaling=constrained);

[Maple Plot]

Löydetään toinenkin ominaisvektori aika läheltä. Koska sininen nuoli peittää punaisen, niin siinä ominaisarvo lamda  on välillä [0,1].

Toinen esimerkki:

>    A:=<<1,5>|<6,2>>;

A := Matrix(%id = 5208664)

>    n:=40:display(seq(kuvakulma(A,<cos(Theta),sin(Theta)>),Theta=[seq(k*2*Pi/n,k=0..n)]),insequence=true,scaling=constrained);

[Maple Plot]

No lasketaan:

>    karpoly:=det(A-lambda*Id(2));

karpoly := lambda^2-3*lambda-28

>    Lambda:=solve(karpoly=0,lambda);

Lambda := 7, -4

>    rref(A-Lambda[1]*Id(2));

Matrix(%id = 4940668)

x2 on vapaa, x1=x2, joten esim. [1,1] kelpaa.

>    v1:=<1,1>;

v1 := Vector(%id = 14904624)

>    rref(A-Lambda[2]*Id(2));

Matrix(%id = 12870932)

x2 vapaa, x1=-(6/5)x2, joten x2=5, x1=-6 kelpaa:

>    v2:=<-6,5>;

v2 := Vector(%id = 14902404)

>    A.v1=7*v1;

Vector(%id = 13221128) = Vector(%id = 14901748)

>    arrow([v1,v2],scaling=constrained);

[Maple Plot]

Esim 2 Onko kiertokuvauksella ominaisarvoja/vektoreita?

>    A:=<<cos(phi),sin(phi)>|<-sin(phi),cos(phi)>>;

A := Matrix(%id = 14192956)

>    phi:=Pi/4:

>    n:=40:display(seq(kuvakulma(A,<cos(Theta),sin(Theta)>),Theta=[seq(k*2*Pi/n,k=0..n)]),insequence=true,scaling=constrained);

[Maple Plot]

No ei sitten millään voi olla ominaisarvoja, eihän? Vai voiko sittenkin?

Lasketaanpa!

>    A;

Matrix(%id = 14192956)

>    karpoly:=det(A-lambda*Id(2));

karpoly := lambda^2-lambda*2^(1/2)+1

>    lam:=solve(karpoly=0,lambda);

lam := 1/2*2^(1/2)+1/2*I*2^(1/2), 1/2*2^(1/2)-1/2*I*2^(1/2)

>    M1:=A-lam[1]*Id(2);

M1 := Matrix(%id = 12183060)

>    rM1:=ref(M1);

rM1 := Matrix(%id = 12137816)

>    x2:=t: x1:=solve(rM1[1,1]*x+rM1[1,2]*x2=0,x);

x1 := t*I

>    v:=subs(t=1,<x1,x2>);

v := Vector(%id = 12228584)

Tarkistetaan:

>    A.v=lam[1]*v;

Vector(%id = 12360188) = Vector(%id = 12384748)

>    map(evalc,rhs(%));

Vector(%id = 16403336)

Yhtä hyvin:

>    subs(t=I,<x1,x2>);

Vector(%id = 12256496)

Kompleksiset vektorit voivat näyttää kovasti erilaisilta, vaikka ovat LRV.

>    rref(M1);  # Huom! rref sekoaa, johtuuko kompleksiluvuista? Kysymys Maplesoftille!

Matrix(%id = 12512836)

>    Eigenvectors(A);eigenvectors(A);

Vector(%id = 14233112), Matrix(%id = 12640908)

[1/2*2^(1/2)+1/2*I*2^(1/2), 1, {vector([-1+2^(1/2)*(1/2*2^(1/2)+1/2*I*2^(1/2)), 1])}], [1/2*2^(1/2)-1/2*I*2^(1/2), 1, {vector([-1+2^(1/2)*(1/2*2^(1/2)-1/2*I*2^(1/2)), 1])}]

Ominaisarvojen laskentaa Maplella

>    restart:

>    with(LinearAlgebra):
with(linalg):

Warning, the previous binding of the name GramSchmidt has been removed and it now has an assigned value

Warning, the protected names norm and trace have been redefined and unprotected

>    with(plots):setoptions(scaling=constrained):setoptions3d(axes=boxed,orientation=[-30,50]):

Warning, the name changecoords has been redefined

>    alias(Inv=MatrixInverse,Id=IdentityMatrix,Diag=DiagonalMatrix):

>    alias(rref=ReducedRowEchelonForm):alias(ref=GaussianElimination):
alias(Id=IdentityMatrix):

Käsinlaskutyyli vs. eigenvectors/Eigenvectors

>    A:=<<2,0,4> | <0,6,0> | <4,0,2>>;

A := Matrix(%id = 14434832)

>    p:=det(A-lambda*Id(3));factor(p);# Karakteristinen polynomi

p := -lambda^3+10*lambda^2-12*lambda-72

-(lambda+2)*(lambda-6)^2

>    lam:=solve(%=0,lambda);

lam := -2, 6, 6

Ominaisarvon 6 algebrallinen kartaluku on 2.

>    M1:=A-lam[1]*Id(3);
M2:=A-lam[2]*Id(3);

M1 := Matrix(%id = 14438000)

M2 := Matrix(%id = 14442784)

>    {lam[1],ref(M1)},{lam[2],ref(M2)};

{-2, Matrix(%id = 14443312)}, {6, Matrix(%id = 12498952)}

Ominaisavruuksien dimensiot nähdään suoraan tästä: 1 ja 2 (ei-pivot.-sarakkeiden lkm antaa nulliteetin, yhtä hyvin nollarivien lkm,

kun kerran neliömatr.)

Ominaisvektorien laskemista varten on mukavampaa muodostaa rref. (Kannattaa kuitenkin verrata rref-tulosta ref-tulokseen. Jos ovat ristiriidassa, niin ref on luotettavampi, sillä rref saattaa helpommin harhautua pyöristysvirheiden takia.) (rref saattaa ryhtyä käyttämään pivottina alkiota, joka pitää tulkita nollaksi.)

>    {lam[1],ref(M1)},{lam[2],ref(M2)};

{-2, Matrix(%id = 14449808)}, {6, Matrix(%id = 13218628)}

>    lambda[1]=lam[1];

lambda[1] = -2

>    x3:=t: x2:=0: x1:=-t:

>    v1:=subs(t=1,<x1,x2,x3>);

v1 := Vector(%id = 14420772)

>    lambda[2]=lam[2];

lambda[2] = 6

>    x3:=s: x2:=t: x1:=x3:

>    v2:=subs(t=1,s=0,<x1,x2,x3>);v3:=subs(t=0,s=1,<x1,x2,x3>);

v2 := Vector(%id = 14420852)

v3 := Vector(%id = 14420892)

Ominaisarvoon   lambda[2] = 6   liittyy kaksi LRT ominaisvektoria, joten tämän ominaisarvon geometrinen kertaluku = 2. (Algebrallinen kertalukuhan on myös 2.)

Katsotaan vielä valmiilla funktioilla:

>    Eigenvectors(A);

Vector(%id = 14420932), Matrix(%id = 14465640)

Ominaisarvosarake ja samassa järjestyksessä ominaisvektorisarakkeet.

>    (oa,ov):=Eigenvectors(A); # Kätevä tapa samanaikaisesti sijoittaa kahteen muuttujaan.

oa, ov := Vector(%id = 14420972), Matrix(%id = 14469744)

>    oa,ov;

Vector(%id = 14420972), Matrix(%id = 14469744)

>   

Katsotaan vanhalla  linalg-tyylillä:

>    eigenvectors(A); # eigenvectors ei pane pahakseen, vaikka matriisirakenne on uudenaikainen.

[6, 2, {vector([1, 0, 1]), vector([0, 1, 0])}], [-2, 1, {vector([-1, 0, 1])}]

[Ominaisarvo, alg. kertaluku,{ominaiskanta}], [Ominaisarvo, alg. kertaluku,{ominaiskanta}]

Tämä on havainnollinen katsoa, mutta hankalampi poimia.jatkokäsittelyyn.

Kannattaa kokeilla kumpaakin.

Esim. TE 4.5 s. 42

>    A:=<<5,-1,1> | <4,0,-2> | <3,-3,1>>;

A := Matrix(%id = 14471832)

>    p:=det(A-lambda*Id(3));factor(p);# Karakteristinen polynomi

p := -lambda^3+6*lambda^2-32

-(lambda+2)*(lambda-4)^2

>    lam:=solve(%=0,lambda);

lam := -2, 4, 4

>    M1:=A-lam[1]*Id(3);
M2:=A-lam[2]*Id(3);

M1 := Matrix(%id = 12073084)

M2 := Matrix(%id = 14478184)

>    {lam[1],ref(M1)},{lam[2],ref(M2)};

{-2, Matrix(%id = 14480480)}, {4, Matrix(%id = 14482744)}

Ominaisarvon 4 alg, kertaluku = 2, mutta geom. kertaluku vain 1. Ominaisarvo on defektiivinen .

Ominaisvektoreista ei saada R^3  :n kantaa.

>   

Esimerkki dynaamisesta systeemista, kaupunki/esikaupunki-analyysi

>    A:=<<.95,.05>|<.03,.97>>; A:=convert(A,rational);

A := Matrix(%id = 14487160)

A := Matrix(%id = 14489448)

             x[k+1] = A*x[k]  ,   x[0] = [.6, .4]

>    p:=det(A-lambda*Id(2));factor(p);# Karakteristinen polynomi

p := lambda^2-48/25*lambda+23/25

1/25*(25*lambda-23)*(lambda-1)

>    lam:=solve(%=0,lambda);

lam := 1, 23/25

>    M1:=A-lam[1]*Id(2);
M2:=A-lam[2]*Id(2);

M1 := Matrix(%id = 5166524)

M2 := Matrix(%id = 14492600)

>    rM1:=rref(M1);

rM1 := Matrix(%id = 14496944)

>    rM2:=rref(M2);

rM2 := Matrix(%id = 14499152)

>    v1:=<3,5>; v2:=<1,-1>;

v1 := Vector(%id = 14421132)

v2 := Vector(%id = 14421172)

>    lam[2];convert(%,float);

23/25

.9200000000

Esitetään alkupiste x[0]  kannassa {v1, v2} .

>    #x0:=convert(<.6,.4>,rational):

>    x0:=<0.,1>:

>    c:=LinearSolve(<<v1>|<v2>>,x0);

c := Vector(%id = 14421252)

>    0.125*v1;

Vector(%id = 14421292)

>   

Esim: Lausuttava annettu vektori matriisin ominaisvektorikannassa

Edellä teimme tämän. Otetaan uudestaan erillisenä tehtävänä, tätä tarvitaan usein.

Itse asiassa kyse on aivan samasta kuin matriisin diagonalisoinnissa. Tässä tyylissä lasketaan vektorimuodossa.

>    A:=<<9/10,1/10>|<3/10,7/10>>;

A := Matrix(%id = 12601044)

>    (oa,ov):=Eigenvectors(A);

oa, ov := Vector(%id = 14421332), Matrix(%id = 14517352)

>    v1:=ov[1..-1,1];v2:=ov[1..-1,2];

v1 := Vector(%id = 14421452)

v2 := Vector(%id = 14421532)

Tarkistetaan ominaisarvo/vektoriominaisuus:

>    A.v1 = oa[1]*v1;

A.v2 = oa[2]*v2;

Vector(%id = 14421612) = Vector(%id = 14421652)

Vector(%id = 14421732) = Vector(%id = 14421532)

Ladotaan ominaisvektorit vierekkäin matriisiksi. Koska vektorit liittyvät eri ominaisarvoon,  tiedämme jo suoraan, että ne ovat LRT. Siten niiden muodostama matriisi on kääntyvä.

>    V:=<v1 | v2>;

V := Matrix(%id = 14534600)

Olkoon u annettu mieleivaltainen vektori.

>    u:=<-1,2>;

u := Vector(%id = 14421812)

>    c:=LinearSolve(V,u);

c := Vector(%id = 14421892)

Tässä ovat  vektorin u koordinaatit kannassa {v1,v2}.

Tarkistetaan vielä:

>    c[1]*v1+c[2]*v2;

Vector(%id = 14421932)

Kyllä vaan!

Lisää esimerkkejä defektiivisistä matriiseista

Kyse on matriiseista, joilla ei ole tarpeeksi ominaisvektoreita. Toisin sanoen jonkin ominaisarvon geometrinen kertaluku

on aidosti algebrallista pienempi:

>    m[g](lambda) < M[a](lambda)

>    A1:=<<1,0>|<1,1>>; A2:=<<1,1>|<-1,-1>>; A3:=<<0,0>|<1,0>>;

A1 := Matrix(%id = 13088896)

A2 := Matrix(%id = 14547864)

A3 := Matrix(%id = 14550516)

A3 on Strangin mukaan (s. 252) paras esimerkki testaamaan ominaisarvoväittämiä. Monissa tosi/epätosi-kysymyksissä tämä antaa vastauksen "epätosi".

>    map(eigenvectors,[A1,A2,A3]);

[[1, 2, {vector([1, 0])}], [0, 2, {vector([1, 1])}], [0, 2, {vector([1, 0])}]]

Asia selvisi kerralla.  Kaikissa kaksinkertainen ominaisarvo (A1:ssä 1, muissa 0). Jokaisessa vain 1-ulotteinen ominaisavaruus.

(Jopa kolmen eri matriisin voimin). Katsotaan vielä uutta tyyliä:

>    map(Eigenvectors,[A1,A2,A3]);

[Vector(%id = 14422052), Matrix(%id = 12211076), Vector(%id = 14422132), Matrix(%id = 14560268), Vector(%id = 14422252), Matrix(%id = 13898300)]

Tämä tulos on hiukan hämmentävän näköinen. Ominaisvektorimatriisn nolla-sarakkeet täytyy tulkita tyhjiksi.

>    p:=det(A3-lambda*IdM(2));

p := lambda^2*IdM(2)^2

>    M:=A3-0*IdM(2);

M := Matrix(%id = 14550516)

>   

x2=0, x1=t, eli t*[1,0] on ominaisavaruus, kuten valmiit eigenvectors- ja Eigenvectors-funktiot jo laskivat.