www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/gendens.m

    function gendens(opt,nb,fname)
%GENDENS Generate random samples.
%   GENDENS(OPT,NB,FNAME) generates random samples of 
%   length NB from a given density and stores the result
%   in a MAT-file of name FNAME.
%
%   OPT = 1, y = c1*exp(-128*((x-0.3).^2))-3*(abs(x-0.7).^0.4)
%   OPT = 2, y = c2*exp(-128*((x-0.3).^2))-1*(abs(x-0.7).^0.4)
%   OPT = 3, Gaussian density

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 02-Jun-99.
%   Last Revision 08-May-2012.
%   Copyright 1995-2012 The MathWorks, Inc.

ingen = 1; %#ok<NASGU>
switch opt
  case 1
    x = linspace(0,1,max(3*nb,100)); 
    y = exp(-128*((x-0.3).^2))-3*(abs(x-0.7).^0.4); %#ok<NASGU>
    eval([fname, ' = genSIG(x,y,nb,ingen);'])

  case 2
    x = linspace(0,1,max(3*nb,100)); 
    y = exp(-128*((x-0.3).^2))-1*(abs(x-0.7).^0.4); %#ok<NASGU>
    eval([fname, ' = genSIG(x,y,nb,ingen);'])

  case 3
    eval([fname,' = randn(1,nb);'])

  otherwise
      msg = getWavMSG('Wavelet:moreMSGRF:Input_1_2_3');
      errargt(mfilename,msg,'msg');
      error(message('Wavelet:FunctionArgVal:Invalid_Input'));
end
eval(['save ',fname,' ',fname])

%--------------------------------------------------
function sig = genSIG(x,y,nb,ingen) %#ok<DEFNU>

y = y -((y(end)-y(1))*x + y(1)) +  sqrt(eps);
d = y/sum(y);
r = randd(d,nb,ingen);
sig = x(r);
%--------------------------------------------------
function r = randd(proba,nb,ingen)

reps = sqrt(eps);
s = sum(proba);
if s<(1-reps) || s>(1+reps)
    msg = getWavMSG('Wavelet:moreMSGRF:Invalid_Proba');
    errargt(mfilename,msg,'msg');
    error(message('Wavelet:FunctionArgVal:Invalid_Input'));
end
n = length(proba);
q = cumsum(proba);
tab = [[0 q]' (0:n)'];
rng(1);
u = rand(nb,1);
r = 1 + fix(interp1(tab(:,1),tab(:,2),u));
%--------------------------------------------------