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);