Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[t,ad,n,k,nderiv,x,inev,svalue,work]=bspev(t,ad,n,k,nderiv,x,inev,svalue,work);
function [t,ad,n,k,nderiv,x,inev,svalue,work]=bspev(t,ad,n,k,nderiv,x,inev,svalue,work);
%***BEGIN PROLOGUE  BSPEV
%***PURPOSE  Calculate the value of the spline and its derivatives from
%            the B-representation.
%***LIBRARY   SLATEC
%***CATEGORY  E3, K6
%***TYPE      SINGLE PRECISION (BSPEV-S, DBSPEV-D)
%***KEYWORDS  B-SPLINE, DATA FITTING, INTERPOLATION, SPLINES
%***AUTHOR  Amos, D. E., (SNLA)
%***DESCRIPTION
%
%     Written by Carl de Boor and modified by D. E. Amos
%
%     Abstract
%         BSPEV is the BSPLEV routine of the reference.
%
%         BSPEV calculates the value of the spline and its derivatives
%         at X from the B-representation (T,A,N,K) and returns them
%         in SVALUE(I),I=1,NDERIV, T(K) .LE. X .LE. T(N+1).  AD(I) can
%         be the B-spline coefficients A(I), I=1,N if NDERIV=1.  Other-
%         wise AD must be computed before hand by a call to BSPDR (T,A,
%         N,K,NDERIV,AD).  If X=T(I),I=K,N, right limiting values are
%         obtained.
%
%         To compute left derivatives or left limiting values at a
%         knot T(I), replace N by I-1 and set X=T(I), I=K+1,N+1.
%
%         BSPEV calls INTRV, BSPVN
%
%     Description of Arguments
%         Input
%          T       - knot vector of length N+K
%          AD      - vector of length (2*N-NDERIV+1)*NDERIV/2 containing
%                    the difference table from BSPDR.
%          N       - number of B-spline coefficients
%                    N = sum of knot multiplicities-K
%          K       - order of the B-spline, K .GE. 1
%          NDERIV  - number of derivatives, 1 .LE. NDERIV .LE. K.
%                    NDERIV=1 gives the zero-th derivative = function
%                    value
%          X       - argument, T(K) .LE. X .LE. T(N+1)
%          INEV    - an initialization parameter which must be set
%                    to 1 the first time BSPEV is called.
%
%         Output
%          INEV    - INEV contains information for efficient process-
%                    ing after the initial call and INEV must not
%                    be changed by the user.  Distinct splines require
%                    distinct INEV parameters.
%          SVALUE  - vector of length NDERIV containing the spline
%                    value in SVALUE(1) and the NDERIV-1 derivatives
%                    in the remaining components.
%          WORK    - work vector of length 3*K
%
%     Error Conditions
%         Improper input is a fatal error.
%
%***REFERENCES  Carl de Boor, Package for calculating with B-splines,
%                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
%                 pp. 441-472.
%***ROUTINES CALLED  BSPVN, INTRV, XERMSG
%***REVISION HISTORY  (YYMMDD)
%   800901  DATE WRITTEN
%   890831  Modified array declarations.  (WRB)
%   890831  REVISION DATE from Version 3.2
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
%   900326  Removed duplicate information from DESCRIPTION section.
%           (WRB)
%   920501  Reformatted the REFERENCES section.  (WRB)
%***end PROLOGUE  BSPEV
%
persistent i id iwork jj kp1 kp1mn l left ll mflag summlv ; 

if isempty(i), i=0; end;
if isempty(id), id=0; end;
if isempty(iwork), iwork=0; end;
if isempty(jj), jj=0; end;
if isempty(kp1), kp1=0; end;
if isempty(kp1mn), kp1mn=0; end;
if isempty(l), l=0; end;
if isempty(left), left=0; end;
if isempty(ll), ll=0; end;
if isempty(mflag), mflag=0; end;
if isempty(summlv), summlv=0; end;
%     DIMENSION T(N+K)
t_shape=size(t);t=reshape(t,1,[]);
ad_shape=size(ad);ad=reshape(ad,1,[]);
svalue_shape=size(svalue);svalue=reshape(svalue,1,[]);
work_shape=size(work);work=reshape(work,1,[]);
%***FIRST EXECUTABLE STATEMENT  BSPEV
if( k<1 )
%
%
xermsg('SLATEC','BSPEV','K DOES NOT SATISFY K.GE.1',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
elseif( n<k ) ;
xermsg('SLATEC','BSPEV','N DOES NOT SATISFY N.GE.K',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
elseif( nderiv<1 || nderiv>k ) ;
xermsg('SLATEC','BSPEV','NDERIV DOES NOT SATISFY 1.LE.NDERIV.LE.K',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
else;
id = fix(nderiv);
[t,dumvar2,x,inev,i,mflag]=intrv(t,n+1,x,inev,i,mflag);
if( x>=t(k) )
if( mflag~=0 )
if( x>t(i) )
xermsg('SLATEC','BSPEV','X IS NOT IN T(K).LE.X.LE.T(N+1)',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
end;
while (1);
if( i==k )
xermsg('SLATEC','BSPEV','A LEFT LIMITING VALUE CANNOT BE OBTAINED AT T(K)',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
else;
i = fix(i - 1);
if( x~=t(i) )
break;
end;
end;
end;
end;
%
% *I* HAS BEEN FOUND IN (K,N) SO THAT T(I) .LE. X .LT. T(I+1)
%     (OR .LE. T(I+1), IF T(I) .LT. T(I+1) = T(N+1) ).
kp1mn = fix(k + 1 - id);
kp1 = fix(k + 1);
[t,kp1mn,k,dumvar4,x,i,dumvar7,dumvar8,iwork]=bspvn(t,kp1mn,k,1,x,i,work(sub2ind(size(work),max(1,1)):end),work(sub2ind(size(work),max(kp1,1)):end),iwork);   dumvar7i=find((work(sub2ind(size(work),max(1,1)):end))~=(dumvar7));dumvar8i=find((work(sub2ind(size(work),max(kp1,1)):end))~=(dumvar8));   work(1-1+dumvar7i)=dumvar7(dumvar7i); work(kp1-1+dumvar8i)=dumvar8(dumvar8i); 
jj =fix(fix(((n+n-id+2).*(id-1))./2));
%     ADIF(LEFTPL,ID) = AD(LEFTPL-ID+1 + (2*N-ID+2)*(ID-1)/2)
%     LEFTPL = LEFT + L
while (1);
left = fix(i - kp1mn);
summlv = 0.0e0;
ll = fix(left + jj + 2 - id);
for l = 1 : kp1mn;
summlv = summlv + work(l).*ad(ll);
ll = fix(ll + 1);
end; l = fix(kp1mn+1);
svalue(id) = summlv;
id = fix(id - 1);
if( id==0 )
%
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
else;
jj = fix(jj -(n-id+1));
kp1mn = fix(kp1mn + 1);
[t,kp1mn,k,dumvar4,x,i,dumvar7,dumvar8,iwork]=bspvn(t,kp1mn,k,2,x,i,work(sub2ind(size(work),max(1,1)):end),work(sub2ind(size(work),max(kp1,1)):end),iwork);   dumvar7i=find((work(sub2ind(size(work),max(1,1)):end))~=(dumvar7));dumvar8i=find((work(sub2ind(size(work),max(kp1,1)):end))~=(dumvar8));   work(1-1+dumvar7i)=dumvar7(dumvar7i); work(kp1-1+dumvar8i)=dumvar8(dumvar8i); 
continue;
end;
break;
%20
end;
end;
xermsg('SLATEC','BSPEV','X IS NOT IN T(K).LE.X.LE.T(N+1)',2,1);
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
return;
end;
t_shape=zeros(t_shape);t_shape(:)=t(1:numel(t_shape));t=t_shape;
ad_shape=zeros(ad_shape);ad_shape(:)=ad(1:numel(ad_shape));ad=ad_shape;
svalue_shape=zeros(svalue_shape);svalue_shape(:)=svalue(1:numel(svalue_shape));svalue=svalue_shape;
work_shape=zeros(work_shape);work_shape(:)=work(1:numel(work_shape));work=work_shape;
end %subroutine bspev
%DECK BSPLVD

Contact us at files@mathworks.com