function y = var(x,w,dim) // This function var estimate the variance of the values in X. // Calling Sequence // y=var(x) // y=var(x,w) // y=var(x,w,dim) // Parameters // x: a vector or matrix. // w: weight vector W of length X, or may take the value of 0 and 1. The default value is 0. Consider only non-negative values. // dim: consider the variance along the dimension of X. 1 for clumun wise variamce and 2 for row wise variance. // y: returns the variance of the values in X. // Examples // x=[1.2, 5, 10, -20, 12,10,5,20,32,20]; // w=1:10; // dim=2; // y=var(x, w, dim) ; // See also // Authors // Jitendra Singh if argn(2)==1 then if type(x)==10 then x=ascii(x) end if size(x,1)==1 |size(x,2)==1 then sd=stdev(x) else sd=stdev(x,1) end y=sd.^2; end if argn(2)<=3 & argn(2)>1 then if size(x,1)==1 |size(x,2)==1 then sd=stdev(x); n=length(x); y1= sd.^2; if length(w)==1 & w==0 then y=y1; elseif length(w)==1 & w==1 then y=y1*((n-1)/n); elseif length(w)==n & and(w>=0) then if size(x,1)~=size(w,1) then w=w'; end wmean=sum(x.*w)/sum(w); x1=(x-wmean).^2; l=length(find(w>0)); sd=((sum(w.*x1))/(((l-1)/l)*sum(w))); y=(sd)*((n-1)/n); elseif length(w)~=size(x)& length(w)>1 then error ('The length of W must be compatible with X.') else error('W must be a vector of nonnegative weights, or a scalar 0 or 1.') end else n=size(x,1) sd=stdev(x,1) y1=sd.^2; if length(w)==1 & w==0 then y=y1; elseif length(w)==1 & w==1 then y=y1*((n-1)/n); elseif length(w)==n & and(w>=0) then for i=1:size(x,2) xx=(x(:,i)) if size(xx,1)~=size(w,1) then w=w'; end wmean=sum(xx.*w)/sum(w); x1=(x(:,i)-wmean).^2; l=length(find(w>0)); sd(i)=sum((w.*x1)/(((l-1)/l)*sum(w))); end y=sd*((l-1)/l); elseif length(w)~=size(x,1) & length(w)>1 then error ('The length of W must be compatible with X.') else error('W must be a vector of nonnegative weights, or a scalar 0 or 1.') end end end if argn(2)==3 then if dim==2 then if size(x,1)==1 | size(x,2)==1 then if size(x,1)==1 then y=y; elseif size(x,2)==1 & length(w)== length(x) then error ('The length of W must be compatible with X.') else y=zeros(size(x,1),size(x,2)) end else n=size(x,2) sd=stdev(x,2) y1=sd.^2; if length(w)==1 & w==0 then y=y1; elseif length(w)==1 & w==1 then y=y1*((n-1)/n); elseif length(w)==n & and(w>=0) then for i=1:size(x,1) xx=(x(:,i)) if size(xx,1)~=size(w,1) then w=w'; end wmean=sum(xx.*w)/sum(w); x1=(x(:,i)-wmean).^2; l=length(find(w>0)); sd(i)=sum((w.*x1)/(((l-1)/l)*sum(w))); end y=sd*((l-1)/l); else error('The length of W must be compatible with X.') end end end if dim==1 then if size(x,1)==1 | size(x,2)==1 then if size(x,2)==1 then y=y; elseif size(x,1)==1 & length(w)== length(x) then error ('The length of W must be compatible with X.') else y=zeros(size(x,1),size(x,2)) end end end if dim>2 then if length(w)==1 & w==1 | w==0 then y=zeros(size(x,1), size(x,2)) else error ('The length of W must be compatible with X.') end end if dim<=0 then error('Dimension argument must be a positive integer scalar within indexing range.') end end endfunction