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.