Harj. 6 AV
22.10.02
Alustukset
> | restart: |
Warning, the name changecoords has been redefined
> | with(LinearAlgebra): |
> | alias(ref=GaussianElimination): |
> | alias(Dot=DotProduct,Id=IdentityMatrix): |
Konjugointisäännöt DotProduct:ssa ova niin mutkikkaat ja monitahoiset, että on verrattomasti helpompaa määritellä
suosiolla oma Sis-funktio sisätuloksi. (Lokalisointipuutteen takia käytetään "outoja" nimiä, kuten i_ )
> | Sis:=(u,v)->add(u[i_]*conjugate(v[i_]),i_=1..LinearAlgebra[Dimension](u)); |
1.
> | with(LinearAlgebra):alias(Id=IdentityMatrix): |
> | Sis:=(u,v)->add(u[i_]*conjugate(v[i_]),i_=1..LinearAlgebra[Dimension](u)); |
> | A:=<<1,1>|<-2,3>>; |
> | p:=Determinant(A-lambda*Id(2)); |
> | solve(p=0,lambda); |
Käsinlasku:
> | lambda:=2+I: w:=<-2,1+I>; |
> | u:=map(Re,w); v:=map(Im,w); |
> | uv:=<u|v>; |
> | uvI:=uv^(-1); |
> | alpha:=Re(lambda): beta:=Im(lambda): |
> | C:=<<alpha,-beta>|<beta,alpha>>; |
> | A=uv.C.uvI; |
Siinäpä se taas kerran!
Annetaan mennä vielä Maplella kokonaan:
> | (oa,ov):=Eigenvectors(A); |
> | lambda:=oa[1]: w:=ov[1..-1,1]; |
> | u:=map(Re,w): v:=map(Im,w); |
> | P:=<u|v>; |
> | PI:=P^(-1); |
Jos ollaan laiskoja, niin C voidaan ratkaista näin halpahintaisesti:
> | C:=PI.A.P; |
Huom 1: C-matriisi on yksikäsitteinen (järjestystä vaille). P:n sarakkeet ovat ominaisvektoreita. Ne voidaan normeerata miten hyvänsä.
Normeeraus vaikuttaa kääneismatriisiin ("kompenspoivalla normaarauksella").
Huom 2 : Jos P:n sarakkeet otetaan järjestyksessä <v | u > , niin C:n sivulävistäjän merkit vaihtavat paikkaa. Tämä on se toinen muoto, joka edllisessä harjoituksessa
aiheutti kiusaa. Kokeile harjoituksen vuoksi johtaa kaavaa niinpän, niin näet.
> |
Warning, premature end of input
2.
> | with(plots): |
> | v1:=<1,1>; v2:=<1,-1>; |
> | lambda[1]:=3: lambda[2]:=1/3: |
> | x[k]=c[1]*3^k*v1+c[2]*(1/3)^k*v2; |
Trajektorit {v1,v2}-koordinaatistossa toteuttavat siten ehdon
> | x*y = vakio; |
Jos siis merkitään koordinaatteja tättä ov-koordinaatistossa (x,y). Saadaan siis ihan tavallinen hyperbeliparvi.
Esitetään ominaisvektorikoordinaatistossa, joka kierretään oikeaan asentoon käyttämällä 3d-piirtoa. (2d-plotilla ei onnistu näin, silloin pitäisi kierto kohdistaa dataan,
mikä on hiukan vaivalloisempaa). Kannattaa toki huomata, että tämä mentelmä soveltuu vain silloin, kun kysessä on koordinaatiston kierto. Jos akselien kulma ja/tai skaalat muuttuvat,
on ominaisvektorimatriisin antamaa kannanvaihtomuunnosta sovellettava dataan.
> | display(spacecurve([x,1/x,0,x=.1..10]),spacecurve([x,-1/x,0,x=.1..10]),spacecurve([-x,1/x,0,x=.1..10]),spacecurve([-x,-1/x,0,x=.1..10]),axes=boxed,orientation=[-135,1]); |
Kannattaa täydentää käsin. Alkupisteet kannattaa valita ensin ominaisvektoreilta ja piirtää suuntanuolet.
Sitten esim. pisteet (1,1), (-1,1) , (1,-1), (-1,-1). Tässä tapauksessa saadaan suoraan muotoa y=C/x oleva käyräparvi ominaisvektorikoordinaatistossa.
Sitä yllä olevassa piirroksessa on käytetty.
3.
A:n diagonalisointi on annettu, siitä saadaan itse A vain kertolaskulla (ja käänteismatriisin muodostuksella).
> | restart: |
Warning, the name changecoords has been redefined
> | with(LinearAlgebra): Sis:=(u,v)->add(u[i_]*conjugate(v[i_]),i_=1..Dimension(u)); |
> | A.v[1]=lambda[1]*v[1]; A.v[2]=lambda[2]*v[2]; |
> |
Tästä saadaan A kertomalla oikealta :n käänteismatriisilla.
> |
> |
> |
Warning, premature end of input
> | v1v2:=<<1,1>|<-1,1>>; |
> | Lambda:=DiagonalMatrix([3,1/3]); |
> | A:=v1v2.Lambda.v1v2^(-1); |
> | Eigenvectors(A); #Tarkistus |
Luonnollinen kysmys: Jos tunnetaan matriisin ominaisarvot ja - vektorit, onko matriisi 1-käs. määrätty siinäkin tapauksessa, että se ei ole diagonalisoituva?
4.
> | v[1]:=<2,1,3>: v[2]:=<1,-2,0>; v[3]:=<6,3,-5>; |
> | seq(seq(Sis(v[i],v[j]),j=1..3),i=1..3);linalg[matrix](3,3,[%]); # Tässä kohtuullisen kätevä tapa katsoa sisätulokombinaatiot. |
> | Matrix(3,3,(i,j)->Sis(v[i],v[j])); # Tässä on jo eleganssia, huomaa tämä matriisin muodostustapa! |
> | U:=<v[1]|v[2]|v[3]>; # Tämä on omalla tavallaan elegantein, pitää vaan osata ajatella "matriisiksi". |
> | Transpose(U).U; |
Jo se on varmaakin varmempaa!
> | u:=<9,-2,4>; |
> | c[1]:=Sis(u,v[1])/Sis(v[1],v[1]);c[2]:=Sis(u,v[2])/Sis(v[2],v[2]);c[3]:=Sis(u,v[3])/Sis(v[3],v[3]); |
> | add(c[j]*v[j],j=1..3); |
> | evalm(%); |
Oikein meni!
5.
> | koska pariton kertaa parillinen on pariton , ja sellaisen int. yli O:n suht. symm. välin = 0. |
> |
> | cos(x)*cos(2*x); %=combine(%); |
> | sin(x)*sin(2*x); %=combine(%); |
Ja taas integroidaan cos- tai sin- funkitota yhden tai useamman täyden jakson yli => 0.
Yleisesti:
> | cos(alpha*x)*cos(beta*x): %=combine(%); |
> | sin(alpha)*sin(beta): %=combine(%); |
Emme siis tarvinneet Maplen erinomaista int-komentoa ollenkaan. No mikään ei estä:
> | F:=[1,cos(x),cos(2*x),sin(x),sin(2*x)]; |
> | Matrix(5,5,(i,j)->int(F[i]*F[j],x=-Pi..Pi)); |
Tätä on syytä ihastella!
6.
> | with(LinearAlgebra):alias(ref=GaussianElimination): |
> | A:=<<3,1,-1,3>|<-5,1,5,-7>|<1,1,-2,8>>; |
> | ref(A); |
Ovat LRT, joten GS soveltuu. Tehdään vaiheittain "käsin laskien":
> | v:=seq(A[1..-1,j],j=1..3); |
> | Norm(v[1],2); |
> | e[1]:=Normalize(v[1],2); |
> | Sis(e[1],e[1]); |
> | f[2]:=v[2]-Sis(v[2],e[1])*e[1]; |
> | e[2]:=Normalize(f[2],2); |
> | f[3]:=v[3]-Sis(v[3],e[1])*e[1]-Sis(v[3],e[2])*e[2]; |
> | e[3]:=Normalize(f[3],2); |
> | e[1],e[2],e[3]; |
> | map(v->v*10/sqrt(5),[%]); |
Tai:
> | 10*<e[1]|e[2]|e[3]>/sqrt(5); |
Valmiilla GramSchmidt:lla:
> | vvv:=seq(A[1..-1,j],j=1..3); |
> | GramSchmidt([vvv]); |
> | GramSchmidt([vvv],normalized); |
> | Q:=Matrix(%); |
> | Transpose(Q).Q; |
> |