Code covered by the BSD License  

Highlights from
Numerical Differentiation

image thumbnail
from Numerical Differentiation by Husam Aldahiyat
Performs single dimensional differentiation numerically.

[d]=datnum(n,m)
	function [d]=datnum(n,m)
		cll=0;
		n=n-1;
		d=ones(n+1);
		AAA=cell(n+1,n+1);
		ld=0;
		if m==1 && n==1
			for i=0:n
				s=0;
				for j=0:n
					if j~=i
						d(i+1,j+1)=(((-1)^(m-j))*factorial(m)*1)/(factorial(j)*factorial(n-j));
						s=s+d(i+1,j+1);
					end
				end
				d(i+1,i+1)=-1*s;
			end
			return
		end
		for i=0:n
			for j=0:n
				K=[];
				for k=0:n
					if k~=j
						if k~=i
							if j~=i
								K=[K,k-i];
							end
						end
					end
				end
				if ~isempty(K)
					lop=length(K);
					if m==1 && m~=n
						AA2=cumprod(K);
						AA=AA2(lop);
					elseif m==n
						AA=1;
					elseif m==n-1
						AA=cumsum(K);
						AA=AA(length(K));
					elseif m==n-2
						L=K;
						s=0;
						for f1=1:2*n-m
							for k1=f1+1:lop
								pr=1*L(f1)*L(k1);
								s=s+pr;
							end
						end
						AA=s;
					else
						c=nchoosek(K,(n-m));
						dr=cumprod(c')';
						as=size(dr);
						df=dr(:,as(2));
						ld=ld+1;
						cll=cll+1;						
						sss=0;
						for gh=1:as(1)
							sss=sss+df(gh);
						end
						AA=sss;	
					end
					AAA{i+1,j+1}=AA;
				end
			end
		end
		for i=0:n
			s=0;
			for j=0:n
				if j~=i
					d(i+1,j+1)=(((-1)^(m-j))*factorial(m)*AAA{i+1,j+1})/(factorial(j)*factorial(n-j));
					s=s+d(i+1,j+1);
					ld=ld+1;
				end
			end
			d(i+1,i+1)=-1*s;
		end

Contact us at files@mathworks.com