L8maple

Luento ke 9.10.02

Alustukset

>    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): alias(Diag=DiagonalMatrix):

>    # Diag([a,b,c]);

Diagonalisoituvuus

Teoriaa

Muistathan aina , vaikka unissasi (ja jo 1. välikokeessa), ja osaathan todistaakin: Eri ominaisarvoihin liittyvät ominaisvektorit ovat LRT.

Määr: Neliömatriisit A ja B ovat similaariset , jos on olemassa säännöllinen (eli kääntyvä) matriisi S siten, että

                  B = S*A*S^(-1)  .

Jos A on similaarinen diagonaalimatriisin kanssa  (ts. on olemassa diagonaalimatriisi D se. A = S*D*S^(-1)  ), sanotaan, että A on diagonalisoituva

(lyh. diagva).

Lause TE 4.5. s. 44, Lay Thm 5 " The Diagonalization Thm , s. 320, KRE Thm 5 s. 394 (asiallisesti sama, muotoilu hiukan vähemmän yleinen)

A (n x n ) on diagva, joss (jos ja vain jos)

A:lla on n kpl. LRT ominaisvektoreita, ts. A:n ominaisvektoreista voidaan muodostaa K^n  :n kanta, missä K = R  tai K = C .

Erityisesti, jos A:n ominaisarvot ovat erilliset, niin A on diagva.

Seuraus 4.6 . A on diagva joss M[a](lambda) = m[g](lambda)  kaikilla ominaisarvoilla lambda . (Jokaisen ominaisarvon algebrallinen ja geometrinen kertaluku

on sama.)

Palautetaan mieleen V2-asia , jota hyödynnettiin (ilman todistusta):

Symmetrinen matriisi on diagonalisoituva ja ominaisarvot ovat reaaliset .

Palaamme tämänkaltaisiin kysmyksiin, kunhan ensin

puhumme vähän sisätuloista ja ortogonaalisuudesta,

Diagonalisointiresepti : (seuraa suoraan päälauseen todistuksesta)

1) Lasketaan A:n ominaisarvot ja -vektorit (pessimistit laskevat vain geometriset kertaluvut).

    Jos ominaisvektoreita ei ole tarpeksi, A ei diagonalisoidu.

2) Jos ominaisvektoreita on tarpeeksi, muodostetaan matriisit S ja Lambda , missä

       -  S:n sarakkeet ovat A:n ominaisvektorit.

       -   Lambda on diagonaalimatriisi, jossa diagonaalilla on ominaisarvot samassa järjestyksessä kuin S:ssä ominaisvektorit

          (eli ominaisarvot ja -vektorit vastaavat toisiaan).

3) Koska S:n sarakkeet LRT, voidaan muodostaa, ja siis muodostetaan S^(-1)  .

Tarkistus : Kerrotaan S*Lambda*S^(-1)  ja katsotaan, onko A.

Diagonalisoinnin tarkoitus on löytää matriisit S , Lambda , S^(-1)  ja hyödyntää niitä esim. matriisin potenssien laskemisessa tms. analyysissa,

ei siis vain laskea ja todeta, että eräs matriisikaava on tosi.

Esim 1

Diagonalisoi seuraava matsriisi, jos mahdollista.

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

A := Matrix(%id = 15584912)

Koska ominaisarvojen ja -vektoreiden laskentaa on jo harjoiteltu, käytämme valmista Eigenvectors -funktiota.

>   

>   

Warning, premature end of input

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

oa, ov := Vector(%id = 16832808), Matrix(%id = 15138156)

Valitettavasti tässä jää aika vähän tehtävää, koska Maple palauttaa mukavasti ov-matrisiin juuri siten, että sarakkeina ovat oa-vektorin alkoita

vastaavat ominaisvektorit. Jos ominaisvektoreita ei ole tarpeeksi, Maple palauttaa nollasarakkeen.

Normaalisti siis on määritettävä kunkin ominaisavaruuden kanta.

>    S:=ov;Lambda:=Diag(oa); SI:=S^(-1);

S := Matrix(%id = 15138156)

Lambda := Matrix(%id = 16944148)

SI := Matrix(%id = 15237224)

Tässä on siis matriisin diagonalisointi.

Voidaan tarkistaa:

>    A = S.Lambda.SI;

Matrix(%id = 15584912) = Matrix(%id = 15432580)

Lisää esimerkkejä, esim. KRE ss. 394 - 395

Katsotaan tässäkin lisää tapauksia.

Esim 2

Diagonalisoi, jos mahdollista:

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

A := Matrix(%id = 17108620)

>    Eigenvectors(A);

Vector(%id = 16738876), Matrix(%id = 15688364)

Nollasarake keskellä kertoo, että ominaisavaruudessa E[A](-2)  on vain yksi kantavektori, eli

       m[g](-2) = 1 , vaikka   M[a](-2) = 2

Esim. 3

Diagonalisoi, jos mahdollista:

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

A := Matrix(%id = 14634424)

Koska kyseessä on kolmiomatriisi, ominaisarvot paistavat suoraan päälävistäjältä. Ovatko molemmat ominaisavaruudet 2-ulotteisia?

Turvaudumme halpamaiseen keinoon:

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

oa, ov := Vector(%id = 14494132), Matrix(%id = 5211528)

>    S:=ov: Lambda:=Diag(oa): SI:=S^(-1):

>    diagonalisointi:=[S,Lambda,SI];

diagonalisointi := [Matrix(%id = 5211528), Matrix(%id = 15486632), Matrix(%id = 4444156)]

>    A,S.Lambda.SI;  # Verrataan.

Matrix(%id = 14634424), Matrix(%id = 4588488)

>   

Kaupunkidynamiikkaa diagonalisoimalla

Vrt. myös TE Esim. 4.6, s. 46-47, KRE s. 377 Exa 2

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

A := Matrix(%id = 4538192)

A := Matrix(%id = 15447616)

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

oa, ov := Vector(%id = 4751108), Matrix(%id = 4730148)

Jätetään  normeeraamatta, koska ajosta toiseen muuttuminen osoittautui hankalaksi.

>    # ov[1..-1,2]:=3*ov[1..-1,2]: ov; # Ei mitenkään välttämätöntä.
# Huomaa, että Maple saattaa vaihdella järjestystä, joten voit
# joutua vaihtamaan sarakenumeroa.
# Huom2: Ominaisarvojen muodostamaa vektoria ei missään nimessä saa normeerata!

>    S:=ov: SI:=S^(-1): Lambda:=Diag(oa):

>    S,Lambda,SI;

Matrix(%id = 4730148), Matrix(%id = 15835728), Matrix(%id = 4921464)

>    Lambda_pot_k:=map(x->x^k,Lambda);

Lambda_pot_k := Matrix(%id = 4898292)

>    Lambda_limes:=map(limit,Lambda_pot_k,k=infinity);

Lambda_limes := Matrix(%id = 4818988)

>    lim_A_potenssiin_k:=S.Lambda_limes.SI;

lim_A_potenssiin_k := Matrix(%id = 15519420)

>    alias(Alim=lim_A_potenssiin_k):

>    Alim.<1,0>, Alim.<0,1>;

Vector(%id = 5001248), Vector(%id = 15552744)

>    Alim.<p,1-p>;

Vector(%id = 5241180)

Sama tulos, olipa alkupiste mikä tahansa todennäköisyysvektori (tai ylimalkaan vektori, jonka koordinaattisumma = 1)..

Ominaisvektorikantalasku L7maple -työarkilla osoitti, että tulos on ominaisvektorin v[1]  suuntainen tod. vektori, eli juuri yllä oleva.

(Laskut ovat hyvin läheistä sukua toisilleen.)

Käytetään  lopuksi raakaa voimaa   ja verrataan:

>    A:=convert(A,float); # seq(A^k,k=1..10);

A := Matrix(%id = 5249280)

>    A20:=(A^20);

A20 := Matrix(%id = 12062704)

>    A40:=A20.A20;

A40 := Matrix(%id = 15466396)

>    A80:=A40.A40;

A80 := Matrix(%id = 5047112)

>    A160:=A80.A80;

A160 := Matrix(%id = 12247412)

>    convert(Alim,float);

Matrix(%id = 12253912)

Kompleksiset ominaisarvot

Alustukset

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

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

Voiko kiertokuvauksella olla ominaisarvoja?

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

A := Matrix(%id = 16260896)

>    phi:=Pi/2:

>    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 = 16260896)

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

karpoly := lambda^2+1

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

lam := I, -I

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

M1 := Matrix(%id = 12674688)

>    rM1:=ref(M1);

rM1 := Matrix(%id = 12775536)

>    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 = 12768636)

>    A.v,I*v;

Vector(%id = 12795536), Vector(%id = 12892896)

>    v_:=map(conjugate,v);

v_ := Vector(%id = 12895284)

>    A.v_ = -I*v_;

Vector(%id = 12845052) = Vector(%id = 12865108)

>   

Toinen 2x2- esimerkki kompl. ominaisarvoista

>    A:=<<.5,.75>|<-.6,1.1>>;

A := Matrix(%id = 13023304)

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

p := lambda^2-1.6*lambda+1.000

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

lam := .8000000000+.6000000000*I, .8000000000-.6000000000*I

>    M:=map(convert,A-lam[1]*Id(2),rational);

M := Matrix(%id = 13299628)

>    ref(M);  # Ei olisi tarpeen, tiedetään muutenkin, että rivit ovat LRT.

Matrix(%id = 13426844)

>    10*%;

Matrix(%id = 13398532)

>    x1:=2*t: x2:=solve((3+6*I)*x1=-6*x,x);

x2 := -t-2*I*t

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

v1 := Vector(%id = 13358160)

>    v2:=map(conjugate,v1);

v2 := Vector(%id = 13358200)

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

Vector(%id = 13358280) = Vector(%id = 13628268)

>    A.v2=lam[2]*v2;

Vector(%id = 13587560) = Vector(%id = 13666492)

>    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]

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

[Maple Plot]

Lasketaan reaalinen similariteettimuunnos:

>    v1;

Vector(%id = 13358160)

>    u:=map(Re,v1); v:=map(Im,v1);

u := Vector(%id = 13480752)

v := Vector(%id = 13805152)

>    S:=<u | v>;

S := Matrix(%id = 13768924)

>    SI:=S^(-1);

SI := Matrix(%id = 13846568)

>    ab:=<<0.8,-0.6>|<0.6,0.8>>;

ab := Matrix(%id = 13954360)

>    A,S.ab.SI;

Matrix(%id = 13023304), Matrix(%id = 14050396)

>   

>   

Niinpä vaan on.