CAD/CAM技术及应用
otherwise % 'nearest', 'linear', 'v5cubic'
yiMat = zeros(numelXi,prodDs,superiorfloat(xCol,yMat,xiCol)); if ~eqsp && any(diff(xiCol) < 0)
[xiCol,p] = sort(xiCol);
else
p = 1:numelXi;
end
% Find indices of subintervals, x(k) <= u < x(k+1),
% or u < x(1) or u >= x(m-1).
if isempty(xiCol)
k = xiCol;
elseif eqsp
k = min(max(1+floor((xiCol-xCol(1))/h),1),n-1);
else
[ignore,k] = histc(xiCol,xCol);
k(xiCol<xCol(1) | ~isfinite(xiCol)) = 1;
k(xiCol>=xCol(n)) = n-1;
end
switch method(1)
case 'n' % 'nearest'
i = find(xiCol >= (xCol(k)+xCol(k+1))/2);
k(i) = k(i)+1;
yiMat(p,:) = yMat(k,:);
case 'l' % 'linear'
if eqsp
s = (xiCol - xCol(k))/h;
else
s = (xiCol - xCol(k))./h(k);
end
for j = 1:prodDs
yiMat(p,j) = yMat(k,j) + s.*(yMat(k+1,j)-yMat(k,j)); end
case 'v' % 'v5cubic'
extrapval = NaN;
if eqsp
% Data are equally spaced
s = (xiCol - xCol(k))/h;
s2 = s.*s;