>

../L/ominaisarvot.mws

pe 1.3.02

> restart:

Warning, the name changecoords has been redefined

>

Alustukset

> 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]):
with(plottools):

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

> V2L:=vek->convert(vek,list):
v2l:=vek->convert(vek,list):
L2V:=lis->convert(lis,Vector):
l2v:=lis->convert(lis,vector):

> #read("c:\\opetus\\maple\\v202.mpl"):
#read("/home/apiola/opetus/peruskurssi/v2-3/maple/v202.mpl");
#read("/p/edu/mat-1.414/maple/v202.mpl"):

LinearAlgebra vs. linalg

Kerrataanpa tässä osin samoja asioita, joita on L/Lineaarialgebra.mws:ssä .

> rivi:=<1 | 2 | 3>;sarake:=<1,2,3>;M1:=<sarake | sarake>; M2:=<rivi,rivi>;M3:=<M2,rivi>;M4:=<M3 | sarake>;

rivi := _rtable[135549692]

sarake := _rtable[135812044]

M1 := _rtable[135578428]

M2 := _rtable[135653200]

M3 := _rtable[135282728]

M4 := _rtable[135811044]

Tämä on kätevää ja havainnollista. Pidämme sarakkeittain latomista ensisijaisena tapana, se esiintyy hyvin usein oikeasti. Siis sovitaan perustyyliksi:

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

A := _rtable[135768152]

Toisinaan on tietysti luonnollista ajatella riveittäin. Sama matriisi tehtäisiin siis näin:

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

A := _rtable[134730552]

Alla on käytetty myös linalg-tyyylin muunnelmaa uuteen kirjoittamalla matrix :n sijasta Matrix .

> M4[1,[1,2,3,2,2,2,2]]; # 1. rivin sarakkeet 1,2,3,2,2,2,2
M4[1..3,3]; # 3. sarakkeen kaikki rivit (1..3), eli koko 3. sarake

_rtable[135937124]

_rtable[135937204]

> M4[1..2,1..2]; # Osamatriisi.

_rtable[135951776]

Ominaisarvojen laskentaa Maplella

>

Käsinlaskutyyli vs. eigenvectors/Eigenvectors

> A:=<<2,0,4> | <0,6,0> | <4,0,2>>; Id:=IdM(3); # IdM on alias.

A := _rtable[138361068]

Id := _rtable[138497192]

> p:=det(A-lambda*Id);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;
M2:=A-lam[2]*Id;

M1 := _rtable[135171448]

M2 := _rtable[135251312]

> gaussjord(M1),gaussjord(M2);

matrix([[1, 0, 1], [0, 1, 0], [0, 0, 0]]), matrix([...

lam[1]=-2, M1: x2=0, x3=t, x1=-t, eli v1=[-1,0,1]

lam[2]=6, M2: x2=s, x3=t, x1=x3=t, v2=[1,0,1], v3=[0,1,0].

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);

_rtable[135937484], _rtable[135401164]

Ominaisarvosarake ja samassa järjestyksessä ominaisvektorisarakkeet.

Tästä on kätevää poimia.

Katsotaan vanhalla kunnon linalg-tyylillä:

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

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

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

Tämä on havainnollinen katsoa, mutta hieman hankalampi poimia.

Kannattaa kokeilla kumpaakin.

Esim: Lausuttava annettu vektori matriisin ominaisvektorikannassa

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

A := _rtable[135396856]

> om:=Eigenvectors(A);

om := _rtable[135398240], _rtable[135386984]

> lam:=om[1];

lam := _rtable[135398240]

> ov:=om[2];

ov := _rtable[135386984]

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

v1 := _rtable[135396960]

v2 := _rtable[135397040]

Tarkistetaan ominaisarvo/vektoriominaisuus:

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

A.v2 = lam[2]*v2;

_rtable[135397120] = _rtable[135397200]

_rtable[135397280] = _rtable[135397360]

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 := _rtable[135436788]

Olkoon u annettu mieleivaltainen vektori.

> u:=<-1,2>;

u := _rtable[135397440]

> c:=LinearSolve(V,u);

c := _rtable[135397520]

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

Tarkistetaan vielä:

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

_rtable[135397600]

Kyllä vaan!

Esimerkkejä defektiivisistä matriiseista

Kyse on matriiseista, joilla ei ole tarpeeksi ominaisvektoreita.

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

A1 := _rtable[135528008]

A2 := _rtable[135494372]

A3 := _rtable[135576268]

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])}]...

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

[_rtable[135397760], _rtable[135576148], _rtable[13...

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

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

M := _rtable[135576268]

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

Lineaarikuvaukset tasossa ja niiden havannollistaminen.

Seuraavilla komennoilla voidaan havainnollistaa minkä tahansa tason lineaarikuvakusen käyttäytymistä. Kun halutaan vaihtaa kuvausta, niin vaihdetaan alla oleva A-matriisi. Suorita alla olevat rivit ja tee itsellesi selväksi, mistä on kyse. Kokeile eri kulmia Theta . Voit rakentaa myös animaation tallettamalla useita kuvia varastoon ja tulostamalla ne komennolla: display([kuva1, kuva2, kuva3,...],insequenze=true);

Tässä sitten tehtävä: Selvittele matriisien A1, B1, C1 kuvausominaisuuksia. Löydätkö suuntia, joissa lähtö (sininen) ja kuva (punainen) ovat samansuuntaiset (suunnilleen). Kuvaile myös sanallisesti, mitä kukin kuvaus tekee. (KRE p. 420)

> A1:=Matrix([[0,1],[1,0]]); B1:=Matrix([[1,0],[2,1]]); C1:=Matrix([[0,1],[-1,0]]); D1:=Matrix([[1,0],[0,-1]]); E1:=Matrix([[-1,0],[0,-1]]);

A1 := _rtable[135684576]

B1 := _rtable[135682792]

C1 := _rtable[135680892]

D1 := _rtable[135581020]

E1 := _rtable[135673412]

Tarvitsemme usein funktiota v2l, joka on v202.mpl-tiedostossa ja yllä. Koodi on kaikessa koruttomuudessaan vain tämä:

> print(V2L);

proc (vek) options operator, arrow; convert(vek,lis...

> A:=A1:
o:=<0,0>;
Theta:='Theta': u:=<cos(Theta),sin(Theta)>;
v:=A.u;
Theta:=Pi/3:

o := _rtable[135675676]

u := _rtable[135675756]

v := _rtable[135675836]

> lahto:=arrow(V2L(o), V2L(u), 0.01, 0.05, 0.02, color=blue):
kuva:=arrow(V2L(o), V2L(v), 0.01, 0.05, 0.02, color=red):
display([lahto,kuva]);

[Maple Plot]

Idea on, että sininen nuoli edustaa yksikkövektoria, joka kuvataan A:lla kertomalla punaiseksi nuoleksi. Tässä voidaan kulmaa Theta vaihtelemalla nähdä eri

lähtövektoreiden kuvat. Kohta alkavat paineet kasvaa animaation tekemiseen.

Animaatio

> #A:=0.5*<<1,1>|<1,1>>;
A:=<<1,0>|<1,1>>;
o:=<0,0>:
Theta:='Theta': u:=<cos(Theta),sin(Theta)>:
v:=A.u:
n:=35: h:=2*Pi/n: Theta:=seq(i*h,i=0..n):
uut:=seq(Vector([evalf(cos(Theta[i])),evalf(sin(Theta[i]))]),i=1..n+1):
veet:=map(u->A.u,[uut]):
snuoli:=u->arrow(v2l(o),v2l(u),0.01,0.05,0.02,color=blue):
pnuoli:=u->arrow(v2l(o),v2l(u),0.01,0.05,0.02,color=red):

A := _rtable[135582740]

> kuvajono:=seq(display([snuoli(uut[i]),pnuoli(veet[i])]),i=1..n+1):
siniset:=seq(display([snuoli(uut[i])]),i=1..n+1):

> display([siniset],scaling=constrained);

[Maple Plot]

> display([kuvajono],insequence=true,axes=none);

[Maple Plot]

> eigenvectors(A);

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

> display([snuoli(uut[10]),pnuoli(veet[10])]);

[Maple Plot]

> Eigenvectors(A);

_rtable[135675916], _rtable[135656452]

> Theta:='Theta':u;v;

_rtable[135676036]

_rtable[135676116]

> useq:=op(v2l(u));vseq:=op(v2l(v));

useq := cos(Theta), sin(Theta)

vseq := cos(Theta)+sin(Theta), sin(Theta)

> plot([[useq,Theta=0..2*Pi],[vseq,Theta=0..2*Pi]],color=[blue,red]);

[Maple Plot]

Pääakseliprobleema

> snuoli:=u->arrow([0,0],v2l(u),0.01,0.05,0.02,color=blue):
pnuoli:=u->arrow([0,0],v2l(u),0.01,0.05,0.02,color=red):
mnuoli:=u->arrow([0,0],v2l(u),0.01,0.05,0.02,color=black):

> #A:=<<5,2>|<2,2>>;#A:=<<3,2*sqrt(3)>|<2*sqrt(3),7>>;

> #A:=<<0,1>|<1,0>>;

> A:=<<17,-15>|<-15,17>>; # KRE:n esimerkki

A := _rtable[135642912]

> Eigenvectors(A);X:=%[2]/sqrt(2);

_rtable[135676196], _rtable[135584708]

X := _rtable[134738108]

>

> Q:=<x1|x2>.A.<x1,x2>;qyht:=expand(Q)=128;

Q := x1*(17*x1-15*x2)+x2*(-15*x1+17*x2)

qyht := 17*x1^2-30*x1*x2+17*x2^2 = 128

> a:=8: b:=2: # Laskettiin käsin.

> y1:=a*cos(t): y2:=b*sin(t):

> plot([y1,y2,t=0..2*Pi],scaling=constrained);

[Maple Plot]

> x12:=X.<y1,y2>;display([plot([op(v2l(x12)),t=0..2*Pi]),mnuoli(X[1..2,1]),mnuoli(X[1..2,2])]);

x12 := _rtable[135676356]

[Maple Plot]

> implicitplot(qyht,x1=-6..6,x2=-6..6,color=black);

[Maple Plot]