www.gusucode.com > datafun 工具箱matlab源码程序 > datafun/deconv.m

    function [q,r]=deconv(b,a)
%DECONV Deconvolution and polynomial division.
%   [Q,R] = DECONV(B,A) deconvolves vector A out of vector B.  The result
%   is returned in vector Q and the remainder in vector R such that
%   B = conv(A,Q) + R.
%
%   If A and B are vectors of polynomial coefficients, deconvolution
%   is equivalent to polynomial division.  The result of dividing B by
%   A is quotient Q and remainder R.
%
%   Class support for inputs B,A:
%      float: double, single
%
%   See also CONV, RESIDUE.

%   Copyright 1984-2012 The MathWorks, Inc.

if a(1)==0
    error(message('MATLAB:deconv:ZeroCoef1'))
end
[mb,nb] = size(b);
nb = max(mb,nb);
na = length(a);
if na > nb
   q = zeros(superiorfloat(b,a));
   r = cast(b,class(q));
else
   % Deconvolution and polynomial division are the same operations
   % as a digital filter's impulse response B(z)/A(z):
   [q,zf] = filter(b, a, [1 zeros(1,nb-na)]);
   if mb ~= 1
      q = q(:);
   end
   if nargout > 1
      r = zeros(size(b),class(q));
      lq = length(q);
      r(lq+1:end) = a(1)*zf(1:nb-lq);
   end
end