www.gusucode.com > 高等数学问题求解源码程序 > CH15/ztrans_define.m

    function varargout=ztrans_define(varargin)
%ZTRANS_DEFINE   根据定义求函数的z变换
% EZ=ZTRANS_DEFINE(EN,N,Z,'ztrans')  求序列EN的z变换
% EN=ZTRANS_DEFINE(EZ,Z,N,'iztrans')  求z变换式EZ的z逆变换
%
% 输入参数:
%     ---EN,EZ:给定的序列或z变换式的表达式
%     ---N,Z:EN和EZ的符号自变量
%     ---TYPE:指定z变换类型,可以有'ztrans'和'iztrans'两种取值
% 输出参数:
%     ---EZ,EN:求得的z变换式或z逆变换式
%
% See also Laplace_Define

args=varargin;
type=args{end};
switch lower(type)
    case {1,'ztrans'}
        [en,n,z]=deal(varargin{1:end-1});
        Ez=symsum(en*z^(-n),n,0,inf);
        varargout{1}=Ez;
    case {2,'iztrans'}
        [Ez,z,n]=deal(varargin{1:end-1});
        Ez=Ez*z^(n-1);
        [~,den]=numden(simple(Ez));
        zk=sort(solve(den,z));
        H=FrequencyTable(zk);
        S=H(:,1); P=H(:,2);
        R=0;
        for k=1:length(S)
            D=diff((z-zk(k))^P(k)*Ez,z,double(P(k)-1));
            R=R+1/gamma(P(k))*limit(D,z,zk(k));
        end
        varargout{1}=R;
end
web -broswer http://www.ilovematlab.cn/forum-221-1.html