Z-muunnos ja differenssiyhtälöt

7.11.00

>

Z-muunnoksia ja käänteismuunnoksia

> restart:alias(Z=ztrans,IZ=invztrans);

Warning, the name changecoords has been redefined

Z, IZ

> ztrans(1,n,z);

z/(z-1)

> ztrans(a^k,k,z):simplify(%);

-z/(-z+a)

> ztrans(k,k,z);

z/((z-1)^2)

> Z(cos(k*alpha),k,z);Z(sin(k*alpha),k,z);

(z-cos(alpha))*z/(z^2-2*z*cos(alpha)+1)

sin(alpha)*z/(z^2-2*z*cos(alpha)+1)

> seq(Z(x(k-j),k,z),j=1..4);

Z(x(k),k,z)/z, Z(x(k),k,z)/(z^2), Z(x(k),k,z)/(z^3)...

> seq(Z(x(k+j),k,z),j=1..3);

z*Z(x(k),k,z)-x(0)*z, z^2*Z(x(k),k,z)-x(0)*z^2-x(1)...

>

Käänteismuunnoksia

Z-käänteismuunnoksessa on annettu funktio z-> F(z) ja etsitään sen kertoimia, kun F(z) esitetään 1/z:n potenssien mukaan.

Jos F(1/z) on analyyttinen O:ssa, se voidaan kehittää potensssisarjaksi (1-käs.), jolloin F(z):lle saadaan sarjaesitys korvaamalla z 1/z:lla.

Esim:

> F:=z-> z/(z-2);G:=normal(F(1/z));

F := proc (z) options operator, arrow; z/(z-2) end ...

G := -1/(2*z-1)

> subs(z=1/z,series(G,z=0,10));

1+2/z+4/(z^2)+8/(z^3)+16/(z^4)+32/(z^5)+64/(z^6)+12...

Maple osaa kehittää jopa äärettömyyspisteen ympäristössä, saadaan siis vielä yksinkertaisemmin:

> series(F(z),z=infinity,10);

1+2/z+4/(z^2)+8/(z^3)+16/(z^4)+32/(z^5)+64/(z^6)+12...

> IZ(F(z),z,k);

2^k

> F:=z-> z/((z-1)*(z-2));G:=normal(F(1/z));subs(z=1/z,series(G,z=0,10));

F := proc (z) options operator, arrow; z/((z-1)*(z-...

G := z/((z-1)*(-1+2*z))

1/z+3/(z^2)+7/(z^3)+15/(z^4)+31/(z^5)+63/(z^6)+127/...

> IZ(F(z),z,k);seq(%,k=0..9);

-1+2^k

0, 1, 3, 7, 15, 31, 63, 127, 255, 511

> #convert(F(z),parfrac,z);map(IZ,[op(%)],z,k);

Exa 3.8:

> Y:=z/((z-1)*(z-2)):Yperz:=Y/z: Yperz:=convert(%,parfrac,z);

Yperz := -1/(z-1)+1/(z-2)

> Y:=expand(z*Yperz);IZ(Y,z,k);

Y := -z/(z-1)+z/(z-2)

-1+2^k

Jos oltaisiin kehitetty suoraan jakamatta z:lla:

> Y:=convert(Y,parfrac,z);

Y := -1/(z-1)+2/(z-2)

> seq(1/(2*I*a)*a^k*(I^k-(-I)^k),k=0..10);seq(a^(k-1)*sin(k*Pi/2),k=0..10);

0, 1, 0, -a^2, 0, a^4, 0, -a^6, 0, a^8, 0

0, 1, 0, -a^2, 0, a^4, 0, -a^6, 0, a^8, 0

Differenssiyhtälöitä

Exa 3.15 s. 239

> dy:=y(k+2)+y(k+1)-2*y(k)=1;

dy := y(k+2)+y(k+1)-2*y(k) = 1

> zdy:=ztrans(dy,k,z);

zdy := z^2*ztrans(y(k),k,z)-y(0)*z^2-y(1)*z+z*ztran...

> Y:=solve(zdy,ztrans(y(k),k,z));

Y := z^2/(z^3-3*z+2)

> y(0):=0:y(1):=1:

> Y;Y:=factor(%);

z^2/(z^3-3*z+2)

Y := z^2/((z+2)*(z-1)^2)

> Yperz:=convert(Y/z,parfrac,z);

Yperz := -2/9*1/(z+2)+1/3/((z-1)^2)+2/9/(z-1)

> Y:=expand(z*Yperz);

Y := -2/9*z/(z+2)+1/3*z/((z-1)^2)+2/9*z/(z-1)

> invztrans(Y,z,k);

-2/9*(-2)^k+1/3*k+2/9

> yy:=unapply(%,k);

yy := proc (k) options operator, arrow; -2/9*(-2)^k...

> subs(y=yy,dy);

yy(k+2)+yy(k+1)-2*yy(k) = 1

> eval(%);

-2/9*(-2)^(k+2)+1-2/9*(-2)^(k+1)+4/9*(-2)^k = 1

> simplify(%);

1 = 1

> plot([seq([k,yy(k)],k=0..8)]);

[Maple Plot]

Voidaan ratkaista myös suoraan rsolve:lla (vrt. dsolve)

> restart:dy:=y(k+2)+y(k+1)-2*y(k)=1;

dy := y(k+2)+y(k+1)-2*y(k) = 1

> rsolve({dy,y(0)=0,y(1)=1},y(k));yy:=unapply(%,k);

-2/9*(-2)^k+2/9+1/3*k

yy := proc (k) options operator, arrow; -2/9*(-2)^k...

Toisaalta voidaan tietenkin muodostaa jonoa mielivalt. pitkälle suoraan rekursiokaavasta:

> %restart:

> y(0):=0:y(1):=1:for k from 0 to 20 do
y(k+2):=1-y(k+1)+2*y(k): od:

> seq(y(k),k=0..20);seq(yy(k),k=0..20);

0, 1, 0, 3, -2, 9, -12, 31, -54, 117, -224, 459, -9...

0, 1, 0, 3, -2, 9, -12, 31, -54, 117, -224, 459, -9...

Exa 3.16

> restart:

> dy:=8*y(k+2)-6*y(k+1)+y(k)=9;
zdy:=ztrans(dy,k,z);
Y:=solve(zdy,ztrans(y(k),k,z));
y(0):=1:y(1):=3/2:
Y;

dy := 8*y(k+2)-6*y(k+1)+y(k) = 9

zdy := 8*z^2*ztrans(y(k),k,z)-8*y(0)*z^2-8*y(1)*z-6...

Y := z*(8*y(0)*z^2-14*y(0)*z+8*y(1)*z-8*y(1)+6*y(0)...

z*(8*z^2-2*z+3)/(8*z^3-14*z^2+7*z-1)

> Yperz:=convert(Y/z,parfrac,z);
Y:=expand(z*Yperz);
invztrans(Y,z,k);
yy:=unapply(%,k);
subs(y=yy,dy);
eval(%);
simplify(%);
plot([seq([k,yy(k)],k=0..9)]);

Yperz := 3*1/(z-1)-8/(2*z-1)+8/(4*z-1)

Y := 3*z/(z-1)-8*z/(2*z-1)+8*z/(4*z-1)

3-4*(1/2)^k+2*(1/4)^k

yy := proc (k) options operator, arrow; 3-4*(1/2)^k...

8*yy(k+2)-6*yy(k+1)+yy(k) = 9

9-32*(1/2)^(k+2)+16*(1/4)^(k+2)+24*(1/2)^(k+1)-12*(...

9 = 9

[Maple Plot]

Exa 3.17 s. 242

> restart:dy:=y(k+2)+2*y(k)=0;
zdy:=ztrans(dy,k,z);
Y:=solve(zdy,ztrans(y(k),k,z));
y(0):=1:y(1):=sqrt(2):
Y;

dy := y(k+2)+2*y(k) = 0

zdy := z^2*ztrans(y(k),k,z)-y(0)*z^2-y(1)*z+2*ztran...

Y := z*(y(0)*z+y(1))/(z^2+2)

z*(z+sqrt(2))/(z^2+2)

>
Yperz:=convert(Y/z,parfrac,z,{I,sqrt(2)});

> Y:=expand(z*Yperz);
invztrans(Y,z,k);

Yperz := (1/2+1/2*I)/(z+I*sqrt(2))+(-1/2+1/2*I)/(-z...

Y := 1/2*z/(z+I*sqrt(2))+1/2*I*z/(z+I*sqrt(2))-1/2*...

1/2*2^(1/2*k)*(-I)^k+1/2*I*2^(1/2*k)*(-I)^k+1/2*2^(...

> yy:=evalc(%);

yy := 2^(1/2*k)*cos(1/2*k*Pi)+2^(1/2*k)*sin(1/2*k*P...

>
yy:=unapply(yy,k);
subs(y=yy,dy);
eval(%);
assume(k,integer):simplify(%);
plot([seq([k,yy(k)],k=0..9)]);

>

yy := proc (k) options operator, arrow; 2^(1/2*k)*c...

yy(k+2)+2*yy(k) = 0

2^(1/2*k+1)*cos(1/2*(k+2)*Pi)+2^(1/2*k+1)*sin(1/2*(...

2^(1/2*k+1)*cos(1/2*(k+2)*Pi)+2^(1/2*k+1)*sin(1/2*(...
2^(1/2*k+1)*cos(1/2*(k+2)*Pi)+2^(1/2*k+1)*sin(1/2*(...

[Maple Plot]

> restart:dy:=y(k+2)+2*y(k)=0;
rsolve({dy,y(0)=1,y(1)=sqrt(2)},y(k));

dy := y(k+2)+2*y(k) = 0

(1/2+1/2*I)*(-I*sqrt(2))^k+(1/2-1/2*I)*(I*sqrt(2))^...

> evalc(%);simplify(%,symbolic);

exp(1/2*k*ln(2))*cos(1/2*k*Pi)+exp(1/2*k*ln(2))*sin...

2^(1/2*k)*(cos(1/2*k*Pi)+sin(1/2*k*Pi))

>

Stabiilisuus

> restart:alias(Z=ztrans,IZ=invztrans);

Z, IZ

Katsotaan osamurtoja hieman tarkemmin

> F:=2*z^3+z^2+z+1:F:=F/(((z-I)*(z+I))^3);

> expand(denom(%));

F := (2*z^3+z^2+z+1)/((z-I)^3*(z+I)^3)

z^6+1+3*z^4+3*z^2

> convert(F,parfrac,z,I);

1/8*1/((z-I)^3)-(1/4+7/16*I)/((z-I)^2)-1/4*I/(z-I)+...

Määritellään kertomislauseeseen sopiva operaattori, annetaan z:n olla globaali.

> mdz:=F->(-z*diff(F,z));

mdz := proc (F) options operator, arrow; -z*diff(F,...

> F:=z/(z-a):

> Fjono:=seq(simplify((mdz@@k)(F)),k=0..4);

Fjono := -z/(-z+a), z*a/((-z+a)^2), -z*a*(z+a)/((-z...

> Fjono[5];convert(%,parfrac,z);

-z*a*(z^3+11*z^2*a+11*z*a^2+a^3)/((-z+a)^5)

-24*a^5/((-z+a)^5)+60*a^4/((-z+a)^4)-50*a^3/((-z+a)...

> ztrans(k^4*a^k,k,z);

-z*a*(z^3+11*z^2*a+11*z*a^2+a^3)/((-z+a)^5)

> IZ(1/(z-a)^4,z,k);

1/6*(6*charfcn[0](k)-6*a^k+11*a^k*k-6*a^k*k^2+a^k*k...

Nämä saadaan derivoinnista a:n suhteen, sittenkin helpommin kuin edellä kertomislausetta käyttäen. (Siinä menee

päättely vähän väärinpäin, vaikka antaa sekin hyvin uskoa asiaan.)

>

> znavat:=proc(G,z)
# Muista kutsua näin:
# tulos:=proc(G,z): # numeroarvot: tulos[1]; # kuva: tulos[2];
local navat,kuva ;
navat:=[solve(denom(G)=0,z)];
kuva:=plots[display]([plot(zip((x,y)->[x,y],map(Re,navat),map(Im,navat)),style=point,symbol=circle),plot([cos(t),sin(t),t=0..2*Pi],scaling=constrained)]);
[navat,kuva];
end:

> zstabiili:=proc(G,z)
max(op(map(abs,[fsolve(denom(G)=0,z,complex)])));
#fsolve(denom(G)=0,z,complex);

> end:

> G:=z^2/(z^3-3*z^2+2.5*z-1);

G := z^2/(z^3-3*z^2+2.5*z-1)

> zstabiili(G,z);

2.000000000

Warning, the name changecoords has been redefined

> tulos:=znavat(G,z):

> tulos[2];tulos[1];

[Maple Plot]

[2., .5000000000+.5000000000*I, .5000000000-.500000...

> max(op(map(abs,tulos[1])));

2.

Esim. 3.24, s. 256

> F:=1/(z^3+1/3*z^2-1/4*z-1/12);

F := 1/(z^3+1/3*z^2-1/4*z-1/12)

> tulos:=znavat(F,z):

> max(op(map(abs,tulos[1])));

1/2

> tulos[2];tulos[1];

[Maple Plot]

[1/2, -1/2, -1/3]

> zstabiili(F,z);

.5000000000

Exa 3.25

> G:=1/(z^3-3*z^2-1/4*z+3/4);

G := 1/(z^3-3*z^2-1/4*z+3/4)

> tieto:=znavat(G,z):

> tieto[2];tieto[1];

[Maple Plot]

[1/2, -1/2, 3]

>

Konvoluutio

> zconv:=(x,y,k)->sum(x(j)*y(k-j),j=0..k);

zconv := proc (x, y, k) options operator, arrow; su...

>