Harj. 6 LV
25.10.02 HA
Alustukset, ohjelmat
> | read("/home/apiola/opetus/peruskurssi/v2-3/302/L/v302.mpl"); |
> | # read("/p/edu/mat-1.414/maple/v302.mpl"); # Poista kommentti tästä ja lisää edelle! |
> | #read("c:\\usr\\heikki\\s02\\v302.mpl"); |
> | with(LinearAlgebra): with(plots): |
> | op(trajenuoli); |
1
> | print(SisF); # Sisätulo funktioavaruudessa, emme kuitenkaan tässä "maanläheisessä" tavassa tarvitse sitä. |
Kaikkein opettavaisinta on laskea aivan käsinlaskua simuloiden:
> | f1:=x: |
> | a0:=int(f1*1,x=-Pi..Pi)/int(1*1,x=-Pi..Pi); |
> |
> | a1:=int(f1*cos(x),x=-Pi..Pi)/int(cos(x)^2,x=-Pi..Pi); |
> | a2:=int(f1*cos(2*x),x=-Pi..Pi)/int(cos(2*x)^2,x=-Pi..Pi); |
Nämä oltaisiin voitu päätellä integroitavien parittomuuden perusteella suoraan.
> | b1:=int(f1*sin(x),x=-Pi..Pi)/int(sin(x)^2,x=-Pi..Pi); |
> | b2:=int(f1*sin(2*x),x=-Pi..Pi)/int(sin(2*x)^2,x=-Pi..Pi); |
> | projf1:=b1*sin(x)+b2*sin(2*x); |
> | plot([f1,projf1],x=-Pi..Pi,title="Suoran y=x paras approx trig. 2. ast. polynomilla"); |
> | f2:=x^2: |
> | a0:=int(f2*1,x=-Pi..Pi)/int(1*1,x=-Pi..Pi); |
> |
> | a1:=int(f2*cos(x),x=-Pi..Pi)/int(cos(x)^2,x=-Pi..Pi); |
> | a2:=int(f2*cos(2*x),x=-Pi..Pi)/int(cos(2*x)^2,x=-Pi..Pi); |
> | b1:=int(f2*sin(x),x=-Pi..Pi)/int(sin(x)^2,x=-Pi..Pi); |
> | b2:=int(f2*sin(2*x),x=-Pi..Pi)/int(sin(2*x)^2,x=-Pi..Pi); |
b-kertoimet ovat heti nähtävissä 0:ksi, koska parillinen (f2) kertaa pariton (sin) on pariton.
> | projf2:=a0+a1*cos(x)+a2*cos(2*x)+b1*sin(x)+b2*sin(2*x); |
> | plot([f2,projf2],x=-Pi..Pi,title="Paraabelin y=x^2 paras approx trig. 2. ast. polynomilla"); |
Parittoman/parillisen funktion PNS-approksimaatiossa on vain parittomia/parillisia trig. termejä (sinejä/cosineja).
2.
> | alias(TR=LinearAlgebra[Transpose]): |
(a)
> | A:=<<2,3-4*I>|<3+4*I,2>>; |
> | TR(A); |
> | map(conjugate,%); |
A on hermiittinen. Siitä seuraa: ominaisarvot reaaliset (spektri makaa reaaliakselilla).
> | Eigenvalues(A); |
Niinpä näkyy makaavan.
(b)
> | B:=<<1/2,(1/2)*I*sqrt(3)>|<(1/2)*I*sqrt(3),1/2>>; |
Symmetrinen on, mutta ei hermiittinen. Symmetrisyys ei ole erityisen hyödyllinen ominaisuus kompleksiselle matriisille.
Katsotaan unitaarisuutta:
> | HermitianTranspose(B).B; |
On unitaarinen. Ominaisarvojen pitäisi sijaita kompleksitason yksikköympyrän kehällä,
> | Eigenvalues(B); |
> | map(abs,%); |
Niinpä vaan!
c)
> | C:=<<0,1-I,0>|<1+I,0,1-I>|<0,1+I,0>>; |
> | HermitianTranspose(C); |
> | Eigenvalues(C); |
Tässä nyt oli toinen esimerkki hermiittisestä.
3.
> | A:=<<.5,-.3>|<.6,1.4>>; |
> | trajenuoli(A,<1,1>,10); |
> | (oa,ov):=Eigenvectors(A); |
> | v1:=ov[1..-1,1]: v2:=ov[1..-1,2]: |
> | with(plots): |
> | kuva1:=display(arrow(v1,shape=arrow),arrow(v2,shape=arrow),traje(A,v1,10),view=[-2..2,-2..2]): |
> | op(traje); |
> | arrow([3*v1,3*v2,-3*v1,-3*v2],shape=arrow);[oa,ov]; |
Suora y=x vastaa ominaisarvoa 1.099 > 1, sillä virtaus ulospäin. Toisella taas sisäänpäin.
> | ov2:=display(trajenuoli(A,0.1*v2,40),trajenuoli(A,-0.1*v2,40)):ov1:=display(trajenuoli(A,4*v1,40),trajenuoli(A,-4*v1,40)): display(ov1,ov2); |
> | ov2:=display(traje(A,0.1*v2,40),traje(A,-0.1*v2,40)): |
> | ov1:=display(traje(A,4*v1,40),traje(A,-4*v1,40)): |
> | ovt:=display(ov1,ov2): |
> | kuva1:=display(ovt,traje(A,<3,1.8>,20),traje(A,<3.8,2>,20)): |
> | display(kuva1,traje(A,<0,1>,10),traje(A,<-4,0>,10),traje(A,<-3.6,-1.46>,40),traje(A,<-3.7,-0.85>,10),view=[-5..5,-5..5]); |
> |
> | ovt:=display(ov1,ov2): |
> | kuva1:=display(ovt,trajenuoli(A,<3,1.8>,20),traje(A,<3.8,2>,20)): |
> | display(kuva1,trajenuoli(A,<0,1>,10),trajenuoli(A,<-4,0>,10),traje(A,<-3.6,-1.46>,40),trajenuoli(A,<-3.7,-0.85>,10),arrow([4*v1,4*v2],color=yellow),view=[-5..5,-5..5]); |
4.
> | read("/home/apiola/opetus/peruskurssi/v2-3/302/L/v302.mpl"); |
> | A:=<<0.8,-4>|<0.3,1.5>>; |
> | (oa,ov):=Eigenvectors(A); |
> | w:=ov[1..-1,1]; lambda:=oa[1]: |
> | u:=map(Re,w); v:=map(Im,w); |
> | a:=Re(lambda): b:=Im(lambda): |
> | uv:=<u|v>; |
> | C:=<<a,-b>|<b,a>>; |
> | A,uv.C.uv^(-1); |
> | r:=abs(lambda); |
> | Ckierto:=<<a/r,-b/r>|<b/r,a/r>>; |
> | arrow([3*u,3*v]); |
> | display(trajenuoli(A,0.1*u,10),traje(A,0.1*u,12)); |
> | display(trajenuoli(C,0.1*u,10),traje(C,0.1*u,12)); |
> | display(trajenuoli(Ckierto,u,10),traje(Ckierto,0.3*u,50)); |
> |
5.
> | A:=<<0,.18,0>|<0,0,.71>|<.33,0,.94>>;A,<"juveniles","subadults","adults">; |
> | x[k]=<'j[k]','s[k]','a[k]'>; |
> | (oa,ov):=Eigenvectors(A); |
> | lambda[1]:=oa[1]; lambda[3]:=oa[3]; |
> | Im(%); |
> | lambda[3]:=Re(lambda[3]); |
> | abs(lambda[1]); |
> | op(trajenuoli); |
> | iterjono:=proc (A, x0, n) local x, k; x[0] := x0; for k to n do x[k] := A.x[k-1] end do; [seq(x[k],k=0..n)]; end proc: |
> | A; |
> | display(trajenuoli(A,<0,15,10>,10),axes=boxed); |
> | ov; |
> | w:=ov[1..-1,1]; rv:=map(Re,ov[1..-1,3]); |
> | u:=map(Re,w); v:=map(Im,w); |
> | display(arrow([10*u,10*v,10*rv]),trajenuoli(A,<0,15,10>,40),axes=boxed); |
Pöllöjen määrä tulee hiljalleen alas reaalista ominaisarvoa vastaavan ominaisvektorin suunnassa. Katsotaan numeroina:
> | iterjono(A,<0,15,10>,40); |
Otetaan vielä 40 iteraatiota siitä, mihin viimeksi tultiin (suunnnilleen).
> | iterjono(A,<3.3,0.6,9.8>,40); |
Huonostihan tässä pöllöille käy.
6.
Tässä olisi se vastaava hyvä tarina, mutta antaapa sen olla. Itse suoritus on aivan vastaavanlainen.