www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xreghybridrbf/ModelBuildGUI.m
function [m,Centers,AllKernels,ok] = ModelBuildGUI(m, nObs) %MODELBUILDGUI GUI for building models from templates % % [m,Centers,AllKernels,ok] = MODELBUILDGUI(M, NUMOBS) displays a dialog that % returns values for the centers and all kernels. % Copyright 2005-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. % Date: 2010/12/17 21:02:09 $ str = sprintf(['Enter a vector specifying a range of values for the maximum number ',... 'of centers. This can be a MATLAB expression including the number of ',... 'observations and number of linear parameters. e.g. 10:10:nObs-nLinear\n\n', ... 'Click ''Model settings'' to change any model settings.\n',... 'Select ''Build all kernels'' to create models with the ',... 'specified range of centers for each kernel type (multiquadric,thinplate, etc.)']); dlg = mbcgui.container.Dialog('Name','Model Building Options',... 'InfoString',str,... 'InfoHeight',120,... 'Size',[450 260],... 'Buttons','OK_CANCEL',... 'Resize','off'); fH = dlg.Figure; hKernels = uicontrol('Parent',fH,... 'Style','checkbox',... 'Value',0,... 'String','Build all kernels'); if nObs<20 str= 'linspace(1,nObs-nLinear-2,5)'; else str= 'linspace(10,nObs-nLinear-2,5)'; end hFitOptions= uicontrol('Parent',fH,... 'Style','push',... 'Callback',@iFitOptions,... 'UserData',{m},... 'String','...'); hCenters = uicontrol('Parent',fH,... 'Style','edit',... 'BackgroundColor','w',... 'HorizontalAlignment','left',... 'Callback',{@iCenters,nObs,hFitOptions},... 'String',str,... 'UserData',str); hCentersCtrl = xregGui.labelcontrol('parent',fH,... 'String', 'Maximum numbers of centers:',... 'ControlSize', 180, ... 'LabelSizeMode', 'absolute', ... 'LabelSize', 150 , ... 'Control', hCenters); hFitCtrl = xregGui.labelcontrol('parent',fH,... 'String', 'Model settings:',... 'ControlSize', 20, ... 'LabelSizeMode', 'absolute', ... 'LabelSize', 150, ... 'Control', hFitOptions); ctrlGrid = xreggridbaglayout(fH, ... 'Packstatus', 'off', ... 'Dimension', [3 1], ... 'Gapy', 5, ... 'RowSizes', [20 20 20], ... 'elements', {hCentersCtrl,hFitCtrl,hKernels}); dlg.Content = ctrlGrid; closeMode = dlg.showDialog(); if strcmp(closeMode, 'OK') m= get(hFitOptions,'UserData'); m= m{1}; Centers = getNumCenters(get(hCenters,'String'),m,nObs); Centers= unique(fix(Centers(:)))'; AllKernels= get(hKernels,'Value'); ok = 1; else Centers= 0; AllKernels= 0; ok = 0; end delete(dlg); function iCenters(src,~,nObs,hFitOptions) try m= get(hFitOptions,'UserData'); m= m{1}; vals = getNumCenters(get(src,'String'),m,nObs); vals= vals(:); if isnumeric(vals) && min(vals)>0 && max(vals)<=nObs % input is OK else error(message('mbc:xreghybridrbf:InvalidProperty')) end % provide back up set(src,'UserData',get(src,'String')) catch % reset to default values set(src,'String',get(src,'UserData')) end function iFitOptions(src,~) r= get(src,'UserData'); [r,ok]= gui_globalmodsetup(r{1}); if ok % update userdata set(src,'UserData',{r}); end function n = getNumCenters(evalStr,m,nObs) %#ok<INUSD> nLinear = numParams(m.linearmodpart); %#ok<NASGU> n = eval(evalStr);