function varargout=arfit(varargin) % ARFIT AR parameter estimation via Yule-Walker method. % ARFIT(X,P) opens a GUI for AR coefficients % estimation for the vector X using the Yule-Walker % method. The coefficients and order selection criterias % for all orders until the maximal order P will be % solved. The coefficients are solved by the Levinson- % Durbin algorithmus. The criteria are normalized in % order to show them in the same plot. % % A=ARFIT(X,P) returns the vector A of length (P+1) of % the AR coefficients and the noise level for the % corresponding AR model of the model order P. The GUI % is suppressed. % % [A Y]=ARFIT(X,P) returns the vector Y of a realization % of the resulting AR model. The GUI is suppressed. % % Example: x = rand(3,1); % a = [.8 .3 -.25 .9]'; % for i = 4:1000, % x(i) = sum(a(1:3) .* x(i-1:-1:i-3)) + a(end) * randn; % end % arfit(x,10) % Copyright (c) 2008-2009 % Norbert Marwan, Potsdam Institute for Climate Impact Research, Germany % http://www.pik-potsdam.de % % Copyright (c) 2002-2008 % Norbert Marwan, Potsdam University, Germany % http://www.agnld.uni-potsdam.de % % $Date$ % $Revision$ % % $Log$ % Revision 2.7 2007/12/20 16:26:05 marwan % changed gpl splash behaviour % % Revision 2.6 2007/05/24 12:30:55 marwan % definitions of criteria checked and corrected % % Revision 2.5 2006/02/14 11:45:49 marwan % *** empty log message *** % % Revision 2.4 2005/03/16 11:19:02 marwan % help text modified % % Revision 2.3 2004/11/10 07:05:48 marwan % initial import % % % This program is part of the new generation XXII series. % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or any later version. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% programme properties global props init_properties crit=[]; for i=1:6 props.criteria_line(i).Marker='none'; props.criteria_line(i).LineWidth=props.line.LineWidth; props.criteria_line(i).LineStyle=props.line.LineStyle; end props.criteria_line(6).LineStyle=':'; props.criteria_line(1).Color=[ 0 0 0]; props.criteria_line(2).Color=[.8 0 0]; props.criteria_line(3).Color=[ 0 0 .8]; props.criteria_line(4).Color=[ 0 .6 0]; props.criteria_line(5).Color=[.47 .4 .1]; props.criteria_line(6).Color=[.6 .6 .6]; if ~isempty(findobj('Tag','helpdlgbox')), delete(findobj('tag','helpdlgbox')), end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% splash the GPL splash_gpl('crp'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check and read the input error(nargchk(1,3,nargin)); if nargout>2, error('Too many output arguments.'), end %%%%%% read the command line if isnumeric(varargin{1})==1 i_double=find(cellfun('isclass',varargin,'double')); i_char=find(cellfun('isclass',varargin,'char')); %%%%%% check whether to create the gui nogui=0; check_gui={'gui','nog','sil'}; % gui, nogui, silent if ~isempty(i_char) temp_gui=0; for i=1:length(i_char), temp_gui=temp_gui+strcmpi(varargin{i_char(i)}(1:3),check_gui'); end nogui=min(find(temp_gui))-1; else nogui=0; end if nargout>0, nogui=1; end %%%%%% get the numeric input variables if ~isempty(i_double) for i=1:length(i_double), if i==1 x=varargin{i_double(i)}; x=x(:); maxm=3; elseif i==2 maxm=varargin{i_double(i)}; if max(size(maxm))>1, if ~nogui h=warndlg('The order must be scalar. Using the first value.','Input Parameters'); set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox) set(h,'Tag','helpdlgbox','HandleVisibility','On'); uiwait(h) else warning('The order must be scalar. Using the first value.'); end end maxm=maxm(1); end end in_m=maxm; else error('No data set found.') end if nogui==0 & isempty(findobj('Tag','arfit_Fig')) action='init'; else action='update'; end %%%%%% read from the gui else % get the handles nogui=0; h_fig=findobj('Tag','arfit_fig'); h_fig=h_fig(1); h_data_axes=findobj('Tag','data_axes','Parent',h_fig); h_model_axes=findobj('Tag','model_axes','Parent',h_fig); h_criteria_axes=findobj('Tag','criteria_axes','Parent',h_fig); h_edit_maxorder=findobj('Tag','edit_maxorder','Parent',h_fig); h_popup_order=findobj('Tag','popup_order','Parent',h_fig); h_listbox_coeff=findobj('Tag','listbox_coeff','Parent',h_fig); h_button_model=findobj('Tag','button_model','Parent',h_fig); h_button_copyws=findobj('Tag','button_copyws','Parent',h_fig); h_button_print=findobj('Tag','button_print','Parent',h_fig); % get values x=get(h_fig,'UserData'); crit=get(h_criteria_axes,'UserData'); maxm=str2num(get(h_edit_maxorder,'String')); in_m=get(h_popup_order,'Value'); txt=[repmat('show order ',maxm,1),num2str([1:maxm]'),repmat('|',maxm,1)]'; txt=reshape(txt,1,prod(size(txt))); set(h_popup_order,'String',txt(1:end-1)); if in_m>maxm in_m=maxm; set(h_popup_order,'Value',maxm); end show_crit=[]; for k=1:5; h=findobj('Tag',['criteria',num2str(k)],'Parent',h_fig); if ~isempty(h); show_crit=[show_crit k*get(h,'Value')]; end end noshow_crit=find(~show_crit); show_crit=find(show_crit); action=varargin{1}; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% switch routines %try switch(action) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% initialization case 'init' h=figure(props.window,... % Plot Figure 'Tag','arfit_fig',... 'MenuBar','Figure',... 'Position',[35.0000 41.3571 129.6667 27.2143],... 'Name','AR Fit',... 'DeleteFcn','arfit close',... 'PaperPosition',[0.25 0.25 7.7677 11.193],... 'PaperType','a4',... 'PaperOrientation','portrait',... 'UserData',x); set(0,'showhidden','on') h=findobj('Label','&Help','Type','uimenu'); if isempty(h) h=uimenu('Label','&Help'); h2=uimenu('Parent',h(1),'Label','&Help Arfit','Callback','helpwin arfit'); else h1=flipud(get(h(1),'Children')); set(h1(1),'Separator','on') h2=uimenu('Parent',h(1),'Label','&Help Arfit','Callback','helpwin arfit'); copyobj(h1,h(1)) delete(h1) end set(0,'showhidden','off') %%%%% logo h=axes(props.axes,... 'Position',[69 6.5 6.8 3.5]); logo=load('logo'); h2=imagesc([logo.logo fliplr(logo.logo)]); set(h2,'Tag','uniLogo') set(h,props.logo,'Tag','axes_logo') h=uicontrol(props.text,... 'Tag','text',... 'String','Uni Potsdam',... 'Position',[66 2 22 3.5714]); h2=textwrap(h,{[char(169),' AGNLD'],'University of Potsdam','2002-2007'}); set(h,'String',h2) %%%%% data and model axes % h=uicontrol(props.frame,... % 'Tag','frame',... % 'Position',[3.1667 1.2857 58.5000 24.3571]); h=uicontrol(props.frame,... 'Tag','frame',... 'Position',[3.1667 25.6428 58.5000 .15]); h=uicontrol(props.text,... 'Tag','text',... 'String','Data and Model Plot'); pos=get(h,'Extent'); set(h,'Position',[5.0000 25.1429-.33 pos(3) pos(4)]) h=axes; h2=plot(x); title('Data') set(h2,'Tag','data_line',props.line) set(h,props.axes,... 'Tag','data_axes',... 'Position',[6.5000 14.4286 53.5000 8.5]); h=axes(props.axes,... 'Tag','model_axes',... 'Position',[6.5000 2.7143 53.5000 8.5]); %%%%% criteria % h=uicontrol(props.frame,... % 'Tag','frame',... % 'Position',[64.8333 16.2857 61.8333 9.3571]); h=uicontrol(props.frame,... 'Tag','frame',... 'Position',[64.8333 25.6428 61.8333 .15]); h=uicontrol(props.text,... 'Tag','text',... 'String','Criteria'); pos=get(h,'Extent'); set(h,'Position',[66.3333 25.1429-.33 pos(3) pos(4)]) h=axes('NextPlot','add'); for k=1:5, h2=plot(0,0,'Tag',['criteria_line',num2str(k)],'Visible','off',props.criteria_line(k)); end set(h,props.axes,... 'Tag','criteria_axes',... 'Position',[69.8333 18.000 34.3 5.7857]); h=uicontrol(props.checkbox,... 'Tag','criteria1',... 'ForegroundColor',props.criteria_line(1).Color,... 'String','Variance',... 'Tooltip','Variance of the residues.',... 'Value',1,... 'Callback','arfit criteria',... 'Position',[108.0000 23.3571 17 1.6429]); h=uicontrol(props.checkbox,... 'Tag','criteria2',... 'ForegroundColor',props.criteria_line(2).Color,... 'String','PACF Crit.',... 'Value',0,... 'Callback','arfit criteria',... 'Tooltip','Partial Auto Correlation Function.',... 'Position',[108.0000 21.7143 17 1.6429]); h=uicontrol(props.checkbox,... 'Tag','criteria3',... 'ForegroundColor',props.criteria_line(3).Color,... 'String','AIC Criterion',... 'Value',0,... 'Callback','arfit criteria',... 'Tooltip','Akaike''s Information Criterion.',... 'Position',[108.0000 20.1429 17 1.6429]); h=uicontrol(props.checkbox,... 'Tag','criteria4',... 'String','BIC Criterion',... 'ForegroundColor',props.criteria_line(4).Color,... 'Value',0,... 'Callback','arfit criteria',... 'Tooltip','Bayesian Information Criterion.',... 'Position',[108.0000 18.5000 17 1.6429]); h=uicontrol(props.checkbox,... 'Tag','criteria5',... 'ForegroundColor',props.criteria_line(5).Color,... 'Tooltip','Criterion asses whether the residues follows white noise.',... 'String','White Noise',... 'Value',0,... 'Callback','arfit criteria',... 'Position',[108.0000 16.8571 17 1.6429]); % 'Tooltip','Hannan-Quinn Criterion.',... % 'String','HQ Criterion',... %%%%% AR coefficients field % h=uicontrol(props.frame,... % 'Tag','frame',... % 'Position',[64.8333 1.2857 61.8333 13.6429]); h=uicontrol(props.frame,... 'Tag','frame',... 'Position',[64.8333 14.3571 61.8333 .15]); h=uicontrol(props.text,... 'Tag','text',... 'String','AR Coefficients'); pos=get(h,'Extent'); set(h,'Position',[66.5000 13.8571-.33 pos(3) pos(4)]) h=uicontrol(props.text,... 'Tag','text',... 'String','Max. Order:'); pos=get(h,'Extent'); set(h,'Position',[68.0000 12.08 pos(3) pos(4)]) h=uicontrol(props.edit,... 'Tag','edit_maxorder',... 'Tooltip','Select the maximal order.',... 'String',num2str(maxm),... 'Callback','arfit update',... 'Position',[81.5000 12.2857 5.3333 1.5000]); in_m=maxm; txt=[repmat('order ',maxm,1),num2str([1:maxm]'),repmat('|',maxm,1)]'; txt=reshape(txt,1,prod(size(txt))); h=uicontrol(props.popup,... 'Tag','popup_order',... 'String',txt(1:end-1),... 'Value',maxm,... 'Tooltip','Select the order to show their coefficients.',... 'Callback','arfit update',... 'Enable','off',... 'Position',[88.8333 12.1429 16.5000 1.7143]); h=uicontrol(props.listbox,... 'Tag','listbox_coeff',... 'String','No Coeffs',... 'Tooltip','AR coefficients of the selected order.',... 'Enable','off',... 'ButtonDownFcn','arfit update',... 'Position',[88.8333 2.3571 16.5000 9.7857]); h=uicontrol(props.button,... 'Tag','button_help',... 'String','Help',... 'Tooltip','Opens the help window.',... 'Callback','helpwin arfit',... 'Position',[108.0000 2.3571 17 2.0000]); h=uicontrol(props.button,... 'Tag','button_close',... 'String','Close',... 'Tooltip','Closes this window.',... 'Callback','close',... 'Position',[108.0000 4.71425 17 2.0000]); h=uicontrol(props.button,... 'Tag','button_model',... 'String','Make Model',... 'Tooltip','Copy model to the workspace.',... 'Callback','arfit make_model',... 'Enable','off',... 'Position',[108.0000 9.42855 17 2.0000]); h=uicontrol(props.button,... 'Tag','button_copyws',... 'String','To Workspace',... 'Tooltip','Copy coefficients to the Matlab workspace.',... 'Callback','arfit copyws',... 'Enable','off',... 'Position',[108.0000 11.7857 17 2.0000]); h=uicontrol(props.button,... 'Tag','button_print',... 'String','Print',... 'Tooltip','Print the figure.',... 'Enable','on',... 'Callback','arfit print',... 'Position',[108.0000 7.0714 17 2.0000]); tags={'arfit_fig';'axes_logo';'frame';'text';'data_axes';'model_axes';'criteria_axes';'criteria1';'criteria2';'criteria3';'criteria4';'criteria5';'edit_maxorder';'popup_order';'listbox_coeff';'button_help';'button_close';'button_model';'button_copyws';'button_print';}; h=[]; for i=1:length(tags); h=[h; findobj('Tag',tags{i})]; end set(h,'Units','Norm'); arfit update %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close case 'close' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% print case 'print' h=[]; h=[h; findobj('Tag','criteria1','Parent',gcf)]; h=[h; findobj('Tag','criteria2','Parent',gcf)]; h=[h; findobj('Tag','criteria3','Parent',gcf)]; h=[h; findobj('Tag','criteria4','Parent',gcf)]; h=[h; findobj('Tag','criteria5','Parent',gcf)]; h=[h; findobj('Tag','button_help','Parent',gcf)]; h=[h; findobj('Tag','button_print','Parent',gcf)]; h=[h; findobj('Tag','button_close','Parent',gcf)]; h=[h; findobj('Tag','button_copyws','Parent',gcf)]; h=[h; findobj('Tag','button_model','Parent',gcf)]; set(h,'Visible','Off') h2=[]; h2=[h2; findobj('Tag','popup_order','Parent',gcf)]; h2=[h2; findobj('Tag','listbox_coeff','Parent',gcf)]; h2=[h2; findobj('Tag','criteria_axes','Parent',gcf)]; set(h2,'Units','Character') for k=1:length(h2); pos(k,:)=get(h2(k),'Position'); set(h2(k),'Position',[pos(k,1:2) pos(k,3)+15 pos(k,4)]) end set(h_fig,'CurrentAxes',h_criteria_axes); txt=[{'Var'};{'PACF'};{'AIC'};{'BIC'};{'HQ'};]; h3=[]; for k=1:length(show_crit); h3=[h3 findobj('Tag',['criteria_line',num2str(show_crit(k))],'Parent',h_criteria_axes)]; end h4=legend(h3,txt(show_crit),-1); drawnow h_dlg=printdlg; waitfor(h_dlg) delete(h4) for k=1:length(h2); set(h2(k),'Position',pos(k,:)) end set(h2,'Units','Normalize') set(h,'Visible','On') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% show criteria case 'criteria' set(h_fig,'CurrentAxes',h_criteria_axes) h=findobj('Tag','significance_line1','Parent',h_criteria_axes); signif=get(h,'UserData'); for k=1:length(noshow_crit) h=findobj('Tag',['criteria_line',num2str(noshow_crit(k))],'Parent',h_criteria_axes); if ~isempty(h) set(h,'Visible','Off') end end for k=1:length(show_crit) h=findobj('Tag',['criteria_line',num2str(show_crit(k))],'Parent',h_criteria_axes); if isempty(h) h=plot(1:maxm,crit(:,show_crit(k)), 'Tag',['criteria_line',num2str(show_crit(k))]); set(h,'Parent',h_criteria_axes,'Tag','criteria_line',props.criteria_line(k),'Visible','On') set(h_criteria_axes,props.axes,... 'YTickLabel',[],... 'Tag','criteria_axes',... 'Xlim',[1 maxm],... 'Units','Norm',... 'UserData',crit,... 'NextPlot','add') else set(h,'YData',crit(:,show_crit(k)),'XData',[1:size(crit,1)],'Visible','On') end end % significance line for PACF h=findobj('Tag','significance_line1','Parent',h_criteria_axes); if isempty(h) h=line([1 maxm],[signif(1) signif(1)]) set(h,props.criteria_line(6),... 'Parent',h_criteria_axes,... 'LineWidth',2,... 'Tag','significance_line1',... 'Color', props.criteria_line(2).Color, ... 'Visible','Off') else set(h,'YData',[signif(1) signif(1)],... 'XData',[1 maxm],... 'Visible','Off') end if strcmpi(get(findobj('Tag','criteria_line2','Parent',h_criteria_axes),'Visible'),'on') set(h,'Visible','On') else set(h,'Visible','Off') end % significance line for Q criterion h=findobj('Tag','significance_line2','Parent',h_criteria_axes); if isempty(h) h=line([1 maxm],[signif(2) signif(2)]); set(h,props.criteria_line(6),... 'Parent',h_criteria_axes,... 'LineWidth',2,... 'Color', props.criteria_line(5).Color, ... 'Tag','significance_line2',... 'Visible','Off') else set(h,'YData',[signif(2) signif(2)],... 'XData',[1 maxm],... 'Visible','Off') end if strcmpi(get(findobj('Tag','criteria_line5','Parent',h_criteria_axes),'Visible'),'on') set(h,'Visible','On') else set(h,'Visible','Off') end set(h_criteria_axes,'YTickLabel',[],'YLimMode','Auto','XLim',[1 maxm]) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% copy coefficients to the workspace case 'copyws' results=get(h_listbox_coeff,'UserData'); a=[results{1}(in_m,1:in_m), results{2}(in_m)]; set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor); answer = inputdlg('The AR coefficients will be stored in the variable:','Copy AR Coefficients',1); if ~isempty(answer), assignin('base',answer{1},a), end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% copy AR model to the workspace case 'make_model' results=get(h_listbox_coeff,'UserData'); a=results{1}; v=results{2}; y=make_model(a,v,in_m,length(x)); %%%% plot the model data set(h_fig,'CurrentAxes',h_model_axes) h=findobj('Tag','model_line','Parent',h_model_axes); if isempty(h) h=plot(y); set(h,'Parent',h_model_axes,'Tag','model_line',props.line) else set(h,'YData',y,'XData',[1:length(y)]) end set(h_model_axes,'Tag','model_axes') title('Model Data') set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor); answer = inputdlg('The AR model will be stored in the variable:','Copy AR Model',1); if ~isempty(answer), assignin('base',answer{1},y), end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% update model case 'update' if ~nogui, setptr(h_fig,'watch'), end % covariance matrix: xm=mean(x);N=length(x); warning off for k=0:N; C(k+1)=mean((x(1:N-k)-xm).*(x(1+k:N)-xm))*(N-k)/N; end warning on P(1)=C(1); a(1,1)=1; % Levinson-Durbin algorithmus for m=1:maxm l=1:m-1; if m==1 K(1+1)=(C(1+1))/P(1-1+1); else K(m+1)=(C(m+1)-sum(a(m-1+1,1+(1:m-1)).*C(m-(1:m-1)+1),2))/P(m-1+1); end P(m+1)=(1-K(m+1)^2)*P(m-1+1); a(m+1,m+1)=K(m+1); a(m+1,l+1)=a(m-1+1,l+1)-K(m+1)*a(m-1+1,m-l+1); end % varianz for p=1:maxm; l=1:p; % V(p)=C(1)-sum(a(p+1,l+1).*C(l+1)); V(p)=C(1)-sum(a(p+1,l+1).^l .*C(l+1)); end % criterias: 1 - residues variance % 2 - PACF criteria % 3 - AIC criteria % 4 - BIC criteria % (5 - HQ criteria) % 5 - Q criteria crit=zeros(maxm,5); for m=1:maxm clear y % y(i,1)=sum(a(m+1,(1:m)+1)'.*x(i-(m:-1:1)))+V(m)*randn; % for i=m+1:N; y(i,1)=sum(a(m+1,(1:m)+1)'.*x(i-1:-1:i-m)); end y=filter([0 a(m+1,(1:m)+1)],1,x); epsilon=(x-y); epsilon_mean=mean(epsilon(m:end)); sigma=var(epsilon); clear rho for k=1:25; i=m+1:N-k-1; rho(k)=sum((epsilon(i+1)-epsilon_mean).*(epsilon(i+k+1)-epsilon_mean))/sum((epsilon(i+1)-epsilon_mean).^2); end crit(m,1)=sigma; % Variance of the residues crit(m,2)=abs(a(m+1,m+1)); % PACF crit(m,3)=log(sigma)+2*(m)/(N); % AIC crit(m,4)=log(sigma)+(m)*log(N)/(N); % BIC % crit(m,5)=log(sigma)+2*(m+1)*5*log(log(N-m))/(N-m); crit(m,5)=N*sum(rho.^2); end % signif(1)=1.96 * std(diag(a(2:end,2:end))) / (max(crit(:,2))-min(crit(:,2))); % significance level for the PACF criterion signif(1)=1.96 * sqrt(1/N) / (max(crit(:,2))-min(crit(:,2))); % significance level for the PACF criterion signif(2)=30/(max(crit(:,5))-min(crit(:,5))); % significance level for the Q criterion for k=1:size(crit,2);crit(:,k)=(crit(:,k)-min(crit(:,k)))/(max(crit(:,k))-min(crit(:,k)));end y=make_model(a(2:end,2:end),V,in_m,N); %%%% graphical output if nogui==0 %%%% enable all disabled objects set(h_popup_order,'Enable','On') set(h_listbox_coeff,'Enable','On') set(h_button_model,'Enable','On') set(h_button_copyws,'Enable','On') %%%% show the coefficients space_max=length(num2str(in_m)); clear txt for i=1:in_m space=space_max-length(num2str(i)); txt(i)={['a(',num2str(i),'):',repmat(' ',1,space),sprintf('% 6.4f',a(in_m+1,i+1))]}; end txt(end+1)={['b: ',repmat(' ',1,space_max+1),sprintf('% 6.4f',V(in_m))]}; set(h_listbox_coeff,'String',txt,'Value',1) %%%% plot the model data set(h_fig,'CurrentAxes',h_model_axes) h=findobj('Tag','model_line','Parent',h_model_axes); if isempty(h) h=plot(y); set(h,'Parent',h_model_axes,'Tag','model_line',props.line) else set(h,'YData',y,'XData',[1:length(y)]) end set(h_model_axes,'Tag','model_axes',props.axes,'Units','Norm') title('Model Data') %%%% plot the criteria data if ~isempty(show_crit) set(h_fig,'CurrentAxes',h_criteria_axes) for k=1:length(show_crit) h=findobj('Tag',['criteria_line',num2str(show_crit(k))],'Parent',h_criteria_axes); if isempty(h) h=plot(1:maxm,crit(:,show_crit(k))); set(h,props.criteria_line(show_crit(k)),... 'Parent',h_criteria_axes,... 'Tag',['criteria_line',num2str(show_crit(k))],... 'Visible','On') else set(h,'YData',crit(:,show_crit(k)),... 'XData',[1:size(crit,1)],... 'Visible','On') end end % significance line for PACF criterion h=findobj('Tag','significance_line1','Parent',h_criteria_axes); if isempty(h) h=line([1 maxm],[signif(1) signif(1)]); set(h,props.criteria_line(6),... 'Parent',h_criteria_axes,... 'Tag','significance_line1',... 'Color', props.criteria_line(2).Color, ... 'UserData',signif,... 'LineWidth',2,... 'Visible','Off') else set(h,'YData',[signif(1) signif(1)],... 'XData',[1 maxm],... 'UserData',signif,... 'Visible','Off') end if strcmpi(get(findobj('Tag','criteria_line2','Parent',h_criteria_axes),'Visible'),'on') set(h,'Visible','On') else set(h,'Visible','Off') end % significance line for Q criterion h=findobj('Tag','significance_line2','Parent',h_criteria_axes); if isempty(h) h=line([1 maxm],[signif(2) signif(2)]); set(h,props.criteria_line(6),... 'Parent',h_criteria_axes,... 'Tag','significance_line2',... 'UserData',signif,... 'Color', props.criteria_line(5).Color, ... 'LineWidth',2,... 'Visible','Off') else set(h,'YData',[signif(2) signif(2)],... 'XData',[1 maxm],... 'UserData',signif,... 'Visible','Off') end if strcmpi(get(findobj('Tag','criteria_line5','Parent',h_criteria_axes),'Visible'),'on') set(h,'Visible','On') else set(h,'Visible','Off') end set(h_criteria_axes,props.axes,... 'Tag','criteria_axes',... 'YTickLabel',[],... 'Xlim',[1 maxm],... 'Ylim',[0 1],... 'UserData',crit,... 'Units','Norm',... 'NextPlot','add') end set(h_listbox_coeff,'UserData',{a(2:end,2:end);V}) else varargout{1}=[a(in_m+1,2:end), V(in_m)]; varargout{2}=y; end if ~nogui, setptr(h_fig,'arrow'), end end try, set(0,props.root), end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% error handling if 0 %catch if ~isempty(findobj('Tag','TMWWaitbar')), delete(findobj('Tag','TMWWaitbar')), end z=whos;x=lasterr;y=lastwarn;in=varargin{1}; if ischar(in), in2=in; else, in2=[]; end in=whos('in'); if ~strcmpi(lasterr,'Interrupt') fid=fopen('error.log','w'); err=fprintf(fid,'%s\n','Please send us the following error report. Provide a brief'); err=fprintf(fid,'%s\n','description of what you were doing when this problem occurred.'); err=fprintf(fid,'%s\n','E-mail or FAX this information to us at:'); err=fprintf(fid,'%s\n',' E-mail: marwan@pik-potsdam.de'); err=fprintf(fid,'%s\n',' Fax: ++49 +331 288 2640'); err=fprintf(fid,'%s\n\n\n','Thank you for your assistance.'); err=fprintf(fid,'%s\n',repmat('-',50,1)); err=fprintf(fid,'%s\n',datestr(now,0)); err=fprintf(fid,'%s\n',['Matlab ',char(version),' on ',computer]); err=fprintf(fid,'%s\n',repmat('-',50,1)); err=fprintf(fid,'%s\n',x); err=fprintf(fid,'%s\n',y); err=fprintf(fid,'%s\n',[' during ==> arfit:',action]); err=fprintf(fid,'%s\n',[' criteria ==> ',num2str(crit)]); err=fprintf(fid,'%s',[' input ==> ',mat2str(size(x))]); err=fprintf(fid,'%s\n',[' errorcode ==> no errorcode available']); err=fprintf(fid,'%s\n',' workspace dump ==>'); if ~isempty(z), err=fprintf(fid,'%s\n',['Name',char(9),'Size',char(9),'Bytes',char(9),'Class']); for j=1:length(z); err=fprintf(fid,'%s\n',[z(j).name,char(9),num2str(z(j).size),char(9),num2str(z(j).bytes),char(9),z(j).class]); end, end err=fclose(fid); disp('------------------------------'); disp(' ERROR OCCURED'); disp(' during executing arfit'); disp('------------------------------'); disp(x); disp([' during ',action]); disp('----------------------------'); disp(' Please send us the error report. For your convenience, ') disp(' this information has been recorded in: ') disp([' ',fullfile(pwd,'error.log')]), disp(' ') disp(' Provide a brief description of what you were doing when ') disp(' this problem occurred.'), disp(' ') disp(' E-mail or FAX this information to us at:') disp(' E-mail: marwan@pik-potsdam.de') disp(' Fax: ++49 +331 288 2640'), disp(' ') disp(' Thank you for your assistance.') warning('on') end set(0,props.root) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub-programme make AR model function y=make_model(a,V,in_m,N) y=filter(V(in_m),[1 -a(in_m,(1:in_m))],randn(N,1));