Harj 7 AV
ti 29.10.02
Ratkaisuihin liittyy käsinkirjoitettu pruju, joka on jaossa luennoilla ja saatavissa myös Astridin huoneen ovenpielestä.
Alustukset
| > | with(linalg): with(LinearAlgebra): |
Warning, the protected names norm and trace have been redefined and unprotected
Warning, the assigned name GramSchmidt now has a global binding
| > | alias(GS=LinearAlgebra[GramSchmidt]): # Huomaa tämä! |
| > | alias(TR=LinearAlgebra[Transpose]): |
| > | alias(rref=ReducedRowEchelonForm): alias(ref=GaussianElimination): alias(Diag=DiagonalMatrix,Id=IdentityMatrix): with(plots): |
| > | alias(Dot=DotProduct,Id=IdentityMatrix,TR=Transpose): |
| > | Sis:=(u,v)->add(u[i_]*conjugate(v[i_]),i_=1..LinearAlgebra[Dimension](u)): |
1.
Käsin kirjoitettu pruju.
2.
Kts. myös pruju.
| > | A:=<<1,1,1,1>|<-1,4,-1,4>>; |
| > | Q:=GramSchmidt([A[1..-1,1],A[1..-1,2]],normalized); |
| > | v1:=A[1..-1,1]; |
| > | v2:=A[1..-1,2]; |
| > | q1:=Normalize(v1,2); |
| > | Sis(v2,q1); |
| > | f2:=v2-Sis(v2,q1)*q1; |
| > | q2:=Normalize(f2,2); |
| > | Q:=<q1|q2>; |
| > | R:=TR(Q).A; |
Prujussa on esitetty, miten R-matriisi saadaan suoraan GS-prosessin tuottamista kertoimista.
Tässä on tehty "halpahintaiseen" tyyliin.
| > | b:=<-1,6,5,7>; |
| > | R.x = TR(Q).b; |
| > | rref(<R | TR(Q).b>); |
| > | x:=%[1..-1,-1]; |
| > | b-A.x; |
| > | Norm(%,2); |
| > |
3.
Pruju.
4.
| > | karpoly:=8*lambda^2-2*lambda-1; |
| > | Lambda:=solve(karpoly=0,lambda); |
| > | y:=C1*exp(Lambda[1]*t)+C2*exp(Lambda[2]*t); |
Tässä on yhtälön (HY) yleinen ratkaisu.
Alkuehdot saadaan sijoittamalla t:lle arvo 0 y:n ja diff(y,t):n lausekkeissa.
(Maple-huom: Emme voi kirjoittaa y(0), koska y on vain t:n lauseke eikä Maple-funktio.)
| > | AE:={subs(t=0,y)=-0.2,subs(t=0,diff(y,t))=-0.325}; |
| > | Ceet:=solve(AE,{C1,C2}); |
| > | Y:=subs(Ceet,y); |
Tässä on AA-tehtävämme ratkaisu.
Tarkistus:
| > | subs(t=0,Y), subs(t=0,diff(Y,t)); |
| > | eval(%); |
Alkuehdot toteutuvat.
Sitten diffyhtälö:
| > | 8*diff(Y,t,t)-2*diff(Y,t)-Y; |
Sekin toteutuu, joten kaikki on kunnossa.
5.
| > | karpol:=(lambda+k)^2; |
Tarkistetaan:
| > | expand(%); |
Koska
on kaksinkertainen juuri, saadaan toinen LRT ratkaisu kertomalla t:llä. ("perimätieto").
Yleinen ratkaisu on siten:
| > | y:=(C1+t*C2)*exp(-k*t); |
| > |
6.
| > | restart: |
Warning, the name changecoords has been redefined
| > | karpol:=lambda^2+4*lambda+13; |
| > | Lambda:=solve(karpol=0,lambda); |
| > | alpha:=Re(Lambda[1]); beta:=abs(Im(Lambda[1])); |
Suosimme positiivista beta:aa. Koska Maple saattaa muutella järjestystä, otimme abs:n mukaan peliin. Sinänsä
yleinen ratkaisu ei muutu, otettiinpa kumpi tahansa.
| > | yh:=exp(alpha*t)*(A*cos(beta*t)+B*sin(beta*t)); |
EHY:n erikoista kannattaa etsiä "herätteen" taajuuksisen trig. polynomin muodossa (koska tällainen ei toteuta HY:öä).
| > | yp:=a*cos(t)+b*sin(t); |
| > | dyht:=diff(yp,t,t)+4*diff(yp,t)+13*yp=cos(t); |
Yhtälön vasen puoli: lhs, "left hand side" , vastaavasti oikea puoli: rhs .
cos- ja sin-termien kertoimien oltava samat:
| > | abyht:=coeff(lhs(dyht),cos(t))=1,coeff(lhs(dyht),sin(t))=0; |
| > | ab:=solve({abyht},{a,b}); |
| > | yp:=subs(ab,yp); |
| > | y:=yh+yp; |
Alkuehdot voitaisiin käsitellä subs-tyylillä, kuten edellä. Vielä kätevämpää on muuttaa lauseke funktioksi unapply :lla:
| > |
Warning, premature end of input
| > | yf:=unapply(y,t); |
| > | AB:=solve({yf(0)=0,D(yf)(0)=1},{A,B}); |
| > | yae:=subs(AB,y); |
| > | plot(yae,t=0..20); |
| > | plot([yae,yp],t=0..20); |
| > |
Ajanhetkestä t=2 lähtien yaa ja yp eivät kuvan tarkkuudella erotu toisistaan.