sandbox/easystab/ufdwt.m

    function W=ufdwt(h,pts,order)
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %
    % ufdwt.m
    %
    % Compute Finite Difference Weights for a Uniform Grid
    %
    % Input Parameters:
    %
    % h     - spacing between FD nodes
    % pts   - number of FD points in scheme (3-pt, 5-pt, etc)
    % order - order of the derivative operator to compute weights for
    %         (note: order<pts-1!)
    %         1 computes first derivative differences       
    %         2 computes second derivative differences, etc
    %  
    % Output Parameter:
    %
    % W is the weight matrix. Each row contains a different set of weights
    % (centered or off). If, for example, the number of finite difference points
    % is odd, the centered difference weights will appear in the middle row.
    %
    % Written by: Greg von Winckel - 06/16/04
    % Contact: gregvw@chtm.unm.edu
    %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    
    N=2*pts-1;  p1=pts-1;
    
    A=repmat((0:p1)',1,N);      
    B=repmat((-p1:p1)*h,pts,1);
    
    M=(B.^A)./gamma(A+1); 
    
    rhs=zeros(pts,1);   rhs(order+1)=1;
    
    W=zeros(pts,pts);
    
    for k=1:pts
        W(:,k)=M(:,(0:p1)+k)\rhs;
    end
    
    W=W';   W(1:pts,:)=W(pts:-1:1,:);