home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 5.ddi / SPLINES.DI$ / FNDER.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  1.3 KB  |  42 lines

  1. function fprime=fnder(f,dorder)
  2. % FNDER    Differentiate a spline or pp.
  3.  
  4. %        fprime=fnder(f[,dorder])
  5. %
  6. %  returns the (representation of the) dorder-th derivative of the function 
  7. %  contained in  f  (and in the same form). dorder=1  is the default.
  8.  
  9. % C. de Boor / latest change: Feb.25, 1989
  10. % Copyright (c) 1990-92 by Carl de Boor and The MathWorks, Inc.
  11.  
  12. if (nargin<2), dorder=1;end
  13.  
  14. if (f(1)==10), % the function is in pp-representation:
  15.    [breaks,coefs,l,k,d]=ppbrk(f);
  16.    if (k<=dorder)
  17.       fprime=ppmak([breaks(1) breaks(l+1)],zeros(d,1));
  18.    else
  19.       knew=k-dorder;
  20.       for j=k-1:-1:knew;
  21.          coefs=coefs.*(ones(d*l,1)*[j:-1:j-k+1]);
  22.       end
  23.       fprime=ppmak(breaks,coefs(:,1:knew),d);
  24.    end
  25. elseif (f(1)==11), % the function is in B-repr.; omit trivial B-spline terms.
  26.    [t,a,n,k,d]=spbrk(f);
  27.    if(k<=dorder);
  28.       fprime=spmak(t,zeros(d,n),d);
  29.    else
  30.       knew=k-dorder;
  31.       for j=k-1:-1:knew;
  32.          tt=t(j+1+[0:n])-t(1:n+1);z=find(tt>0);nn=length(z);
  33.          (diff([zeros(1,d);a';zeros(1,d)]))';
  34.          a=ans(:,z)./(ones(d,1)*(tt(z)/j));
  35.          t=[t(z) t(n+2:n+j+1)];n=nn;
  36.       end
  37.       fprime=spmak(t,a);
  38.    end
  39. else,  % unknown representation
  40.    error('unknown function type encountered')
  41. end
  42.