Hello!
It's nice to see someone is working on z-transform. I implemented some rules I
just needed. Maybe they are useful.
Norbert
-------------- next part --------------
remvalue(n,z);
matchdeclare(a,lambda([x],freeof(x,n)));
matchdeclare(b,lambda([x],freeof(x,n) and integerp(x) and x>0));
matchdeclare(c,lambda([x],freeof(x,n)));
matchdeclare(f,all);
matchdeclare(g,lambda([x],freeof(n-1,x)));
defrule(r1,zt(1,n,z),z/(z-1));
defrule(r2,zt(n,n,z),z/(z-1)^2);
defrule(r3,zt(1/n,n,z),log(z/(z-1)));
defrule(r4,zt(a^n,n,z),z/(z-a));
defrule(r5,zt(a^(n-1),n,z),1/(z-a));
defrule(r6,zt(binomial(n,b),n,z),z/(z-1)^(b+1));
defrule(r7,zt(n^b,n,z),block([tmp:z/(z-1)],
for i:1 thru b do tmp:-z*diff(tmp,z),
factor(tmp)));
defrule(r8,zt(sin(a*n),n,z),z*'sin(a)/((z^2-2*z*'cos(a)+1)));
defrule(r9,zt(cos(a*n),n,z),z*(z-'cos(a))/(z^2-2*z*'cos(a)+1));
defrule(r10,zt(kron_delta(b,n),n,z),1/z^b);
defrule(r11,zt(a^n*f,n,z),'subst(z/a,z,ztrans(f,n,z)));
defrule(r12,zt(n^b*g,n,z),block([tmp:ztrans(g,n,z)],
for i:1 thru b do tmp:-z*'diff(tmp,z),
return(tmp)));
defrule(r13,zt(exp(-a*n),n,z),z/(z-exp(-a)));
defrule(r14,zt(f(n-m),n,z),z^(-m)*ztrans(f(n),n,z));
defrule(r15,zt(exp(-a*n)*sin(c*n),n,z),exp(-a)*z*'sin(c)/(z^2-2*exp(-a)*z*'cos(c)+exp(-a)^2));
defrule(r16,zt(exp(-a*n)*cos(c*n),n,z),(exp(-a)^2-exp(-a)*z*'cos(c))/(z^2-2*exp(-a)*z*'cos(c)+exp(-a)^2));
defrule(r17,sinh(a*n),1/2*(exp(a*n)-exp(-a*n)));
defrule(r18,cosh(a*n),1/2*(exp(a*n)+exp(-a*n)));
declare(zt,linear);
ztrans1(e):=apply1(e,r17,r18,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16);
ztrans(f,n,z):=ev(ztrans1(zt(f,n,z)),diff,subst);
defrule(ir1,izt(z/(z-a),z,n),a^n);
defrule(ir2,izt(1/(z-a),z,n),a^(n-1));
declare(izt,linear);
invztrans1(e):=apply1(e,ir1,ir2);
invztrans(f,z,n):=invztrans1(izt(f,z,n));