function [x,y]=plotsample(opt,varargin) %PLOTSAMPLE Display a sample plot. % PLOTSAMPLE displays some noisy sample data. Try to fit the data with % SHOWFIT or SELECTFIT, following the instructions given in the command % window. The sample data is chosen randomly among the 10 predefined % plots described below. % % PLOTSAMPLE is also available from the item 'Plot Sample' of the EzyFit % menu (see EFMENU). % % PLOTSAMPLE(OPT) specifies the sample plot: % 'power': noisy power law % 'linear': noisy data to be fitted by a linear function % 'osc': oscillations % 'damposc': damped oscillations % 'cste': noisy constant % 'exp': noisy exponential decay % 'hist': histogram of 1000 realizations of a random variable % 'hist2': histogram with two gaussian peaks. % 'powco': noisy power law with an exponential cut-off. % 'poly2': 3 curves to be fitted by a 2nd order polynomial fit % % PLOTSAMPLE(N) specifies the number of the sample plot (1 to 10). % % PLOTSAMPLE(...,'fit') also displays the fit. % PLOTSAMPLE(...,'nodisp') does not display the help text in the command % window. % % [X,Y] = PLOTSAMPLE(...) also returns the sample data (this is % equivalent to PLOTSAMPLE; [X,Y] = PICKDATA;). % % Example: % plotsample power fit % (it shows a power law and fits it). % % See also SHOWFIT, EZFIT, PICKDATA, EFMENU. % F. Moisy, moisy_at_fast.u-psud.fr % Revision: 1.36, Date: 2009/09/12 % This function is part of the EzyFit Toolbox % History: % 2005/10/17: v1.00, first version. % 2005/10/31: v1.10, option added. output argument (x,y). % 2005/11/02: v1.11, another plot sample. % 2005/12/06: v1.20, displays the Ezyfit menu. % 2005/12/13: v1.21, displays the text with a matlab link % 2006/02/03: v1.30, fits with free parameter names; new plot samples. % 2006/02/10: v1.31, also clears the annotation objects % 2006/02/16: v1.32, fits with free lhs 'y(x)=...'. Simpler plot title. % option fitmode added. % 2006/03/08: v1.33, the figure is not reset any more; this caused bugs % with insert line. % 2006/09/05: v1.34, bug in the help text fixed. % 2006/10/29: v1.35, 'hist' now plots a true histogram plot % 2007/09/12: v1.36, new option 'nodisp' and minor changes % error(nargchk(0,2,nargin)); rmfit; % remove previous fits listopt = {'power','linear','osc','damposc','cste','exp','hist','hist2','powco','poly2'}; nsample = length(listopt); if nargin==0 opt=floor(nsample*rand+1); end if isnumeric(opt) opt=listopt{max(1,min(opt,nsample))}; end switch lower(opt) case 'power' np = 10+round(50*rand); x=logspace(1,3,np)*exp((rand-0.5)*6); x=(1 + 0.3*(rand(1,np)-0.5)).*x; expo = (0.5+rand*2)*sign(rand-0.5); y=exp((rand-0.5)*6)*rand*(1 + .5*(rand(1,np)-0.5)).*x.^expo; loglog(x, y, 'bo'); axisl xlabel('x'); ylabel('y'); f='power'; txtl=['Try to fit with showfit(''' f ''')']; case 'linear' x=linspace(0,12,20); y=(rand*1.4+0.9)*x+(rand-0.5)*20; x=x+(rand(1,20)-.5)*1.2; y=y+(rand(1,20)-.5)*1.6; plot(x,y,'ks'); xlabel('x'); ylabel('y'); f='affine'; txtl='Try to fit with showfit(''poly1'') or showfit(''affine'')'; case 'osc' np = 200 + round(600*rand); x=linspace(0,40,np); y=2*rand+(2*rand+1)*(1+0.2*rand(1,np)).*sin(rand + x/(1+.1*rand)); plot(x,y,'b.'); xlabel('t (seconds)'); ylabel('U(t) [Volts]'); f='U(t)=U_0+A*sin(omega*t + phi); U_0=1; omega=1; A=2; phi=0.5'; txtl=['Try to fit with showfit(''' f ''')']; case 'damposc' np = 200 + round(600*rand); x=linspace(0,40,np); y=2*rand+(2*rand+1)*(1+0.7*rand(1,np)).*sin(x/(1+.3*rand)).*exp(-x/(8+.3*rand)); plot(x,y,'b.'); xlabel('t (seconds)'); ylabel('U(t) [Volts]'); f='U(t)=offset+U_0*sin(2*pi*t/T)*exp(-t/tau_0); offset=1; T=5; U_0=2; tau_0=10'; txtl=['Try to fit with showfit(''' f ''')']; case 'cste' x=linspace(0,20,20); y=(rand+.5)*11.1+(rand(1,20)-.5)*(rand+1)*1.3; x=x+(rand(1,20)-.5)*.7; plot(x,y,'ro'); axis([0 20 0 1.3*max(y)]); xlabel('x'); ylabel('y'); f='cste'; txtl='Try to fit with showfit(''cste'') or showfit(''affine'')'; case 'exp' np=15+round(rand*30); x=linspace(0,10+round(20*rand),np); y=(rand+0.5)*3*exp(-x/(3.8*rand+2)); x=abs(x+(rand(1,np)-.5)*.7); y=abs(y+(rand(1,np)-.5)*0.05); plot(x,y,'k*'); xlabel('t (s)'); ylabel('N(t)'); f='N(t)=N_0*exp(-t/tau)'; txtl=['Try to fit with showfit(''' f ''')']; case 'hist' np = 300 + round(3000*rand); a=ones(1,np); for i=1:np a(i)=rand+rand+rand+rand+rand+rand+rand+rand-4; end; a=a+(rand-0.5)*2; % shift the center x=linspace(-5,5,15+round(rand*100)); scal=exp(8*(rand-0.5)); hist(a*scal,x*scal); xlabel('x'); ylabel('hist'); f='gauss'; txtl=['Try to fit with showfit(''' f ''')']; case 'hist2' np = 7000 + round(rand*3000); a=ones(1,np); for i=1:round(np/3), a(i)=(rand+rand+rand+rand+rand+rand+rand+rand)/2+5; end; for i=(round(np/3)+1):np, a(i)=(rand+rand+rand+rand+rand+rand+rand+rand)*1.7+8; end; a((np+1):(np+500))=rand(1,500)*20; x=linspace(0,20,400+round(rand*100)); y=hist(a,x); plot(x,y,'r+'); xlabel('x'); ylabel('hist'); f='a_1*exp(-(x-m_1)^2/(2*s_1^2))+a_2*exp(-(x-m_2)^2/(2*s_2^2)); a_1=100; a_2=100; m_1=8; m_2=16'; txtl=['Try to fit with showfit(''' f ''')']; case 'powco' x=logspace(0,3,50); x=(1 + 0.4*(rand(1,50)-0.5)).*x; y=4*rand*(1 + .9*(rand(1,50)-0.5)).*x.^(-(rand+1)).*exp(-x/(100*(rand+.5))); loglog(x, y, 'd'); xlabel('k'); ylabel('E(k)'); f='E(k)=C*k^(-n)*exp(-k/k_c); log; C=5; n=2; k_c=100'; txtl=['Try to fit with showfit(''' f ''')']; case 'poly2', x=linspace(0,15,20); y=rand*2.2*x+(rand*0.6-0.35)*x.^2+(rand(1,20)-.5)*2.5; y2=rand*2.2*x+(rand*0.6-0.35)*x.^2+(rand(1,20)-.5)*2.5; y3=rand*2.2*x+(rand*0.6-0.35)*x.^2+(rand(1,20)-.5)*2.5; plot(x,y,'bo',x,y2,'rs',x,y3,'md'); xlabel('x'); ylabel('y'); f='poly2'; txtl=['Click on a curve, and try to fit with showfit(''' f ''')']; otherwise error('Invalid plotsample option.'); end; title('Sample data'); efmenu; if any(strcmpi(varargin,'fit')) showfit(f); else if ~any(strncmpi(varargin,'nodisp',2)) % new v1.36 disp(txtl); end end if nargout==0 clear x y end