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

A := Matrix(%id = 135866508)

>    Q:=GramSchmidt([A[1..-1,1],A[1..-1,2]],normalized);

Q := [Vector(%id = 135861452), Vector(%id = 138847196)]

>    v1:=A[1..-1,1];

v1 := Vector(%id = 139516036)

>     v2:=A[1..-1,2];

v2 := Vector(%id = 136003120)

>    q1:=Normalize(v1,2);

q1 := Vector(%id = 139515964)

>    Sis(v2,q1);

3

>    f2:=v2-Sis(v2,q1)*q1;

f2 := Vector(%id = 136188156)

>    q2:=Normalize(f2,2);

q2 := Vector(%id = 136198324)

>    Q:=<q1|q2>;

Q := Matrix(%id = 136233404)

>    R:=TR(Q).A;

R := Matrix(%id = 141030800)

Prujussa on esitetty, miten R-matriisi saadaan suoraan GS-prosessin tuottamista kertoimista.

Tässä on tehty "halpahintaiseen" tyyliin.

>    b:=<-1,6,5,7>;

b := Vector(%id = 138799004)

>    R.x = TR(Q).b;

Matrix(%id = 141030800).x = Vector(%id = 140316644)

>    rref(<R | TR(Q).b>);

Matrix(%id = 140202656)

>    x:=%[1..-1,-1];

x := Vector(%id = 138819076)

>    b-A.x;

Vector(%id = 136645160)

>    Norm(%,2);

1/2*74^(1/2)

>   

3.

Pruju.

4.

>    karpoly:=8*lambda^2-2*lambda-1;

karpoly := 8*lambda^2-2*lambda-1

>    Lambda:=solve(karpoly=0,lambda);

Lambda := 1/2, -1/4

>    y:=C1*exp(Lambda[1]*t)+C2*exp(Lambda[2]*t);

y := C1*exp(1/2*t)+C2*exp(-1/4*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};

AE := {1/2*C1*exp(0)-1/4*C2*exp(0) = -.325, C1*exp(0)+C2*exp(0) = -.2}

>    Ceet:=solve(AE,{C1,C2});

Ceet := {C2 = .3000000000, C1 = -.5000000000}

>    Y:=subs(Ceet,y);

Y := -.5000000000*exp(1/2*t)+.3000000000*exp(-1/4*t)

Tässä on AA-tehtävämme ratkaisu.

Tarkistus:

>    subs(t=0,Y), subs(t=0,diff(Y,t));

-.2000000000*exp(0), -.3250000000*exp(0)

>    eval(%);

-.2000000000, -.3250000000

Alkuehdot toteutuvat.

Sitten diffyhtälö:

>    8*diff(Y,t,t)-2*diff(Y,t)-Y;

0.

Sekin toteutuu, joten kaikki on kunnossa.

5.

>    karpol:=(lambda+k)^2;

karpol := (lambda+2)^2

Tarkistetaan:

>    expand(%);

lambda^2+4*lambda+4

Koska lambda = -k  on kaksinkertainen juuri, saadaan toinen LRT ratkaisu kertomalla t:llä. ("perimätieto").

Yleinen ratkaisu on siten:

>    y:=(C1+t*C2)*exp(-k*t);

y := (C1+t*C2)*exp(-2*t)

>   

6.

>    restart:

Warning, the name changecoords has been redefined

>    karpol:=lambda^2+4*lambda+13;

karpol := lambda^2+4*lambda+13

>    Lambda:=solve(karpol=0,lambda);

Lambda := -2+3*I, -2-3*I

>    alpha:=Re(Lambda[1]); beta:=abs(Im(Lambda[1]));

alpha := -2

beta := 3

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

yh := exp(-2*t)*(A*cos(3*t)+B*sin(3*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);

yp := a*cos(t)+b*sin(t)

>    dyht:=diff(yp,t,t)+4*diff(yp,t)+13*yp=cos(t);

dyht := 12*a*cos(t)+12*b*sin(t)-4*a*sin(t)+4*b*cos(t) = 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;

abyht := 12*a+4*b = 1, 12*b-4*a = 0

>    ab:=solve({abyht},{a,b});

ab := {b = 1/40, a = 3/40}

>    yp:=subs(ab,yp);

yp := 3/40*cos(t)+1/40*sin(t)

>    y:=yh+yp;

y := exp(-2*t)*(A*cos(3*t)+B*sin(3*t))+3/40*cos(t)+1/40*sin(t)

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

yf := proc (t) options operator, arrow; exp(-2*t)*(A*cos(3*t)+B*sin(3*t))+3/40*cos(t)+1/40*sin(t) end proc

>    AB:=solve({yf(0)=0,D(yf)(0)=1},{A,B});

AB := {B = 11/40, A = -3/40}

>    yae:=subs(AB,y);

yae := exp(-2*t)*(-3/40*cos(3*t)+11/40*sin(3*t))+3/40*cos(t)+1/40*sin(t)

>    plot(yae,t=0..20);

[Maple Plot]

>    plot([yae,yp],t=0..20);

[Maple Plot]

>   

Ajanhetkestä t=2 lähtien yaa ja yp eivät kuvan tarkkuudella erotu toisistaan.