z-transforms...



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