wolffd@0: function demprgp(action); wolffd@0: %DEMPRGP Demonstrate sampling from a Gaussian Process prior. wolffd@0: % wolffd@0: % Description wolffd@0: % This function plots the functions represented by a Gaussian Process wolffd@0: % model. The hyperparameter values can be adjusted on a linear scale wolffd@0: % using the sliders (though the exponential of the parameters is used wolffd@0: % in the covariance function), or by typing values into the text boxes wolffd@0: % and pressing the return key. Both types of covariance function are wolffd@0: % supported. An extra function specific parameter is needed for the wolffd@0: % rational quadratic function. wolffd@0: % wolffd@0: % See also wolffd@0: % GP wolffd@0: % wolffd@0: wolffd@0: % Copyright (c) Ian T Nabney (1996-2001) wolffd@0: wolffd@0: if nargin<1, wolffd@0: action='initialize'; wolffd@0: end; wolffd@0: wolffd@0: if strcmp(action,'initialize') wolffd@0: wolffd@0: % Bounds on hyperparameter values wolffd@0: biasminval = -3.0; biasmaxval = 3.0; wolffd@0: noiseminval = -20; noisemaxval = -2; wolffd@0: fparminval = 0.0; fparmaxval = 2.0; wolffd@0: inwminval = 0; inwmaxval = 8; wolffd@0: % Initial hyperparameter values wolffd@0: bias = (biasminval+biasmaxval)/2; wolffd@0: noise = (noiseminval+noisemaxval)/2; wolffd@0: inweights = (inwminval+inwmaxval)/2; wolffd@0: fpar = (fparminval+fparmaxval)/2; wolffd@0: fpar2 = (fparminval+fparmaxval)/2; wolffd@0: wolffd@0: gptype = 'sqexp'; wolffd@0: wolffd@0: % Create FIGURE wolffd@0: fig=figure( ... wolffd@0: 'Name','Sampling from a Gaussian Process prior', ... wolffd@0: 'Position', [50 50 480 380], ... wolffd@0: 'NumberTitle','off', ... wolffd@0: 'Color', [0.8 0.8 0.8], ... wolffd@0: 'Visible','on'); wolffd@0: wolffd@0: % List box for covariance function type wolffd@0: nettype_box = uicontrol(fig, ... wolffd@0: 'Style', 'listbox', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'center', ... wolffd@0: 'Position', [0.52 0.77 0.40 0.12], ... wolffd@0: 'String', 'Squared Exponential|Rational Quadratic', ... wolffd@0: 'Max', 1, 'Min', 0, ... % Only allow one selection wolffd@0: 'Value', 1, ... % Initial value is squared exponential wolffd@0: 'BackgroundColor',[0.60 0.60 0.60],... wolffd@0: 'CallBack', 'demprgp GPtype'); wolffd@0: wolffd@0: % Title for list box wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [0.52 0.89 0.40 0.05], ... wolffd@0: 'String', 'Covariance Function Type', ... wolffd@0: 'BackgroundColor', get(fig, 'Color'), ... wolffd@0: 'HorizontalAlignment', 'center'); wolffd@0: wolffd@0: % Frames to enclose sliders wolffd@0: bottom_row = 0.04; wolffd@0: slider_frame_height = 0.15; wolffd@0: biasframe = uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'String', 'bias', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'Position', [0.05 bottom_row 0.35 slider_frame_height]); wolffd@0: wolffd@0: bpos = get(biasframe, 'Position'); wolffd@0: noise_frame_bottom = bpos(2) + bpos(4) + 0.02; wolffd@0: noiseframe = uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.05 noise_frame_bottom 0.35 slider_frame_height]); wolffd@0: wolffd@0: npos = get(noiseframe, 'Position'); wolffd@0: inw_frame_bottom = npos(2) + npos(4) + 0.02; wolffd@0: inwframe = uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.05 inw_frame_bottom 0.35 slider_frame_height]); wolffd@0: wolffd@0: inwpos = get(inwframe, 'Position'); wolffd@0: fpar_frame_bottom = inwpos(2) + inwpos(4) + 0.02; wolffd@0: % This frame sometimes has multiple parameters wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'frame', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.05 fpar_frame_bottom 0.35 2*slider_frame_height]); wolffd@0: wolffd@0: % Frame text wolffd@0: slider_text_height = 0.05; wolffd@0: slider_text_voffset = 0.08; wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.07 bottom_row+slider_text_voffset ... wolffd@0: 0.06 slider_text_height], ... wolffd@0: 'String', 'bias'); wolffd@0: wolffd@0: % Frame text wolffd@0: noiseframe = uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.07 noise_frame_bottom+slider_text_voffset ... wolffd@0: 0.08 slider_text_height], ... wolffd@0: 'String', 'noise'); wolffd@0: wolffd@0: % Frame text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.07 inw_frame_bottom+slider_text_voffset ... wolffd@0: 0.14 slider_text_height], ... wolffd@0: 'String', 'inweights'); wolffd@0: wolffd@0: % Frame text wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.07 fpar_frame_bottom+slider_frame_height+ ... wolffd@0: slider_text_voffset 0.06 slider_text_height], ... wolffd@0: 'String', 'fpar'); wolffd@0: wolffd@0: uicontrol(fig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.07 fpar_frame_bottom+slider_text_voffset ... wolffd@0: 0.06 slider_text_height], ... wolffd@0: 'String', 'fpar2', ... wolffd@0: 'Tag', 'fpar2text', ... wolffd@0: 'Enable', 'off'); wolffd@0: wolffd@0: % Slider wolffd@0: slider_left = 0.07; wolffd@0: slider_width = 0.31; wolffd@0: slider_frame_voffset = 0.02; wolffd@0: biasslide = uicontrol(fig, ... wolffd@0: 'Style', 'slider', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Value', bias, ... wolffd@0: 'BackgroundColor', [0.8 0.8 0.8], ... wolffd@0: 'Position', [slider_left bottom_row+slider_frame_voffset ... wolffd@0: slider_width 0.05], ... wolffd@0: 'Min', biasminval, 'Max', biasmaxval, ... wolffd@0: 'Callback', 'demprgp update'); wolffd@0: wolffd@0: % Slider wolffd@0: noiseslide = uicontrol(fig, ... wolffd@0: 'Style', 'slider', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Value', noise, ... wolffd@0: 'BackgroundColor', [0.8 0.8 0.8], ... wolffd@0: 'Position', [slider_left noise_frame_bottom+slider_frame_voffset ... wolffd@0: slider_width 0.05], ... wolffd@0: 'Min', noiseminval, 'Max', noisemaxval, ... wolffd@0: 'Callback', 'demprgp update'); wolffd@0: wolffd@0: % Slider wolffd@0: inweightsslide = uicontrol(fig, ... wolffd@0: 'Style', 'slider', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Value', inweights, ... wolffd@0: 'BackgroundColor', [0.8 0.8 0.8], ... wolffd@0: 'Position', [slider_left inw_frame_bottom+slider_frame_voffset ... wolffd@0: slider_width 0.05], ... wolffd@0: 'Min', inwminval, 'Max', inwmaxval, ... wolffd@0: 'Callback', 'demprgp update'); wolffd@0: wolffd@0: % Slider wolffd@0: fparslide = uicontrol(fig, ... wolffd@0: 'Style', 'slider', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Value', fpar, ... wolffd@0: 'BackgroundColor', [0.8 0.8 0.8], ... wolffd@0: 'Position', [slider_left fpar_frame_bottom+slider_frame_height+ ... wolffd@0: slider_frame_voffset slider_width 0.05], ... wolffd@0: 'Min', fparminval, 'Max', fparmaxval, ... wolffd@0: 'Callback', 'demprgp update'); wolffd@0: wolffd@0: fpar2slide = uicontrol(fig, ... wolffd@0: 'Style', 'slider', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Value', fpar2, ... wolffd@0: 'BackgroundColor', [0.8 0.8 0.8], ... wolffd@0: 'Position', [slider_left fpar_frame_bottom+slider_frame_voffset ... wolffd@0: slider_width 0.05], ... wolffd@0: 'Min', fparminval, 'Max', fparmaxval, ... wolffd@0: 'Callback', 'demprgp update', ... wolffd@0: 'Tag', 'fpar2slider', ... wolffd@0: 'Enable', 'off'); wolffd@0: wolffd@0: % Text display of hyper-parameter values wolffd@0: wolffd@0: format = '%8f'; wolffd@0: wolffd@0: hp_left = 0.20; wolffd@0: hp_width = 0.17; wolffd@0: biasval = uicontrol(fig, ... wolffd@0: 'Style', 'edit', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [hp_left bottom_row+slider_text_voffset ... wolffd@0: hp_width slider_text_height], ... wolffd@0: 'String', sprintf(format, bias), ... wolffd@0: 'Callback', 'demprgp newval'); wolffd@0: wolffd@0: noiseval = uicontrol(fig, ... wolffd@0: 'Style', 'edit', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [hp_left noise_frame_bottom+slider_text_voffset ... wolffd@0: hp_width slider_text_height], ... wolffd@0: 'String', sprintf(format, noise), ... wolffd@0: 'Callback', 'demprgp newval'); wolffd@0: wolffd@0: inweightsval = uicontrol(fig, ... wolffd@0: 'Style', 'edit', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [hp_left inw_frame_bottom+slider_text_voffset ... wolffd@0: hp_width slider_text_height], ... wolffd@0: 'String', sprintf(format, inweights), ... wolffd@0: 'Callback', 'demprgp newval'); wolffd@0: wolffd@0: fparval = uicontrol(fig, ... wolffd@0: 'Style', 'edit', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [hp_left fpar_frame_bottom+slider_frame_height+ ... wolffd@0: slider_text_voffset hp_width slider_text_height], ... wolffd@0: 'String', sprintf(format, fpar), ... wolffd@0: 'Callback', 'demprgp newval'); wolffd@0: wolffd@0: fpar2val = uicontrol(fig, ... wolffd@0: 'Style', 'edit', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Position', [hp_left fpar_frame_bottom+slider_text_voffset ... wolffd@0: hp_width slider_text_height], ... wolffd@0: 'String', sprintf(format, fpar), ... wolffd@0: 'Callback', 'demprgp newval', ... wolffd@0: 'Enable', 'off', ... wolffd@0: 'Tag', 'fpar2val'); wolffd@0: wolffd@0: wolffd@0: % The graph box wolffd@0: haxes = axes('Position', [0.5 0.28 0.45 0.45], ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'Visible', 'on'); wolffd@0: wolffd@0: % The SAMPLE button wolffd@0: uicontrol(fig, ... wolffd@0: 'Style','push', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position',[0.5 bottom_row 0.13 0.1], ... wolffd@0: 'String','Sample', ... wolffd@0: 'Callback','demprgp replot'); wolffd@0: wolffd@0: % The CLOSE button wolffd@0: uicontrol(fig, ... wolffd@0: 'Style','push', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position',[0.82 bottom_row 0.13 0.1], ... wolffd@0: 'String','Close', ... wolffd@0: 'Callback','close(gcf)'); wolffd@0: wolffd@0: % The HELP button wolffd@0: uicontrol(fig, ... wolffd@0: 'Style','push', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position',[0.66 bottom_row 0.13 0.1], ... wolffd@0: 'String','Help', ... wolffd@0: 'Callback','demprgp help'); wolffd@0: wolffd@0: % Save handles to objects wolffd@0: wolffd@0: hndlList=[fig biasslide noiseslide inweightsslide fparslide ... wolffd@0: biasval noiseval inweightsval ... wolffd@0: fparval haxes nettype_box]; wolffd@0: set(fig, 'UserData', hndlList); wolffd@0: wolffd@0: demprgp('replot') wolffd@0: wolffd@0: wolffd@0: elseif strcmp(action, 'update'), wolffd@0: wolffd@0: % Update when a slider is moved. wolffd@0: wolffd@0: hndlList = get(gcf, 'UserData'); wolffd@0: biasslide = hndlList(2); wolffd@0: noiseslide = hndlList(3); wolffd@0: inweightsslide = hndlList(4); wolffd@0: fparslide = hndlList(5); wolffd@0: biasval = hndlList(6); wolffd@0: noiseval = hndlList(7); wolffd@0: inweightsval = hndlList(8); wolffd@0: fparval = hndlList(9); wolffd@0: haxes = hndlList(10); wolffd@0: nettype_box = hndlList(11); wolffd@0: wolffd@0: wolffd@0: bias = get(biasslide, 'Value'); wolffd@0: noise = get(noiseslide, 'Value'); wolffd@0: inweights = get(inweightsslide, 'Value'); wolffd@0: fpar = get(fparslide, 'Value'); wolffd@0: fpar2 = get(findobj('Tag', 'fpar2slider'), 'Value'); wolffd@0: wolffd@0: format = '%8f'; wolffd@0: set(biasval, 'String', sprintf(format, bias)); wolffd@0: set(noiseval, 'String', sprintf(format, noise)); wolffd@0: set(inweightsval, 'String', sprintf(format, inweights)); wolffd@0: set(fparval, 'String', sprintf(format, fpar)); wolffd@0: set(findobj('Tag', 'fpar2val'), 'String', ... wolffd@0: sprintf(format, fpar2)); wolffd@0: wolffd@0: demprgp('replot'); wolffd@0: wolffd@0: elseif strcmp(action, 'newval'), wolffd@0: wolffd@0: % Update when text is changed. wolffd@0: wolffd@0: hndlList = get(gcf, 'UserData'); wolffd@0: biasslide = hndlList(2); wolffd@0: noiseslide = hndlList(3); wolffd@0: inweightsslide = hndlList(4); wolffd@0: fparslide = hndlList(5); wolffd@0: biasval = hndlList(6); wolffd@0: noiseval = hndlList(7); wolffd@0: inweightsval = hndlList(8); wolffd@0: fparval = hndlList(9); wolffd@0: haxes = hndlList(10); wolffd@0: wolffd@0: bias = sscanf(get(biasval, 'String'), '%f'); wolffd@0: noise = sscanf(get(noiseval, 'String'), '%f'); wolffd@0: inweights = sscanf(get(inweightsval, 'String'), '%f'); wolffd@0: fpar = sscanf(get(fparval, 'String'), '%f'); wolffd@0: fpar2 = sscanf(get(findobj('Tag', 'fpar2val'), 'String'), '%f'); wolffd@0: wolffd@0: set(biasslide, 'Value', bias); wolffd@0: set(noiseslide, 'Value', noise); wolffd@0: set(inweightsslide, 'Value', inweights); wolffd@0: set(fparslide, 'Value', fpar); wolffd@0: set(findobj('Tag', 'fpar2slider'), 'Value', fpar2); wolffd@0: wolffd@0: demprgp('replot'); wolffd@0: wolffd@0: elseif strcmp(action, 'GPtype') wolffd@0: hndlList = get(gcf, 'UserData'); wolffd@0: nettype_box = hndlList(11); wolffd@0: gptval = get(nettype_box, 'Value'); wolffd@0: if gptval == 1 wolffd@0: % Squared exponential, so turn off fpar2 wolffd@0: set(findobj('Tag', 'fpar2text'), 'Enable', 'off'); wolffd@0: set(findobj('Tag', 'fpar2slider'), 'Enable', 'off'); wolffd@0: set(findobj('Tag', 'fpar2val'), 'Enable', 'off'); wolffd@0: else wolffd@0: % Rational quadratic, so turn on fpar2 wolffd@0: set(findobj('Tag', 'fpar2text'), 'Enable', 'on'); wolffd@0: set(findobj('Tag', 'fpar2slider'), 'Enable', 'on'); wolffd@0: set(findobj('Tag', 'fpar2val'), 'Enable', 'on'); wolffd@0: end wolffd@0: demprgp('replot'); wolffd@0: wolffd@0: elseif strcmp(action, 'replot'), wolffd@0: wolffd@0: % Re-sample from the prior and plot graphs. wolffd@0: wolffd@0: oldFigNumber=watchon; wolffd@0: wolffd@0: hndlList = get(gcf, 'UserData'); wolffd@0: biasslide = hndlList(2); wolffd@0: noiseslide = hndlList(3); wolffd@0: inweightsslide = hndlList(4); wolffd@0: fparslide = hndlList(5); wolffd@0: haxes = hndlList(10); wolffd@0: nettype_box = hndlList(11); wolffd@0: gptval = get(nettype_box, 'Value'); wolffd@0: if gptval == 1 wolffd@0: gptype = 'sqexp'; wolffd@0: else wolffd@0: gptype = 'ratquad'; wolffd@0: end wolffd@0: wolffd@0: bias = get(biasslide, 'Value'); wolffd@0: noise = get(noiseslide, 'Value'); wolffd@0: inweights = get(inweightsslide, 'Value'); wolffd@0: fpar = get(fparslide, 'Value'); wolffd@0: wolffd@0: wolffd@0: axes(haxes); wolffd@0: cla wolffd@0: set(gca, ... wolffd@0: 'Box', 'on', ... wolffd@0: 'Color', [0 0 0], ... wolffd@0: 'XColor', [0 0 0], ... wolffd@0: 'YColor', [0 0 0], ... wolffd@0: 'FontSize', 14); wolffd@0: ymin = -10; wolffd@0: ymax = 10; wolffd@0: axis([-1 1 ymin ymax]); wolffd@0: set(gca,'DefaultLineLineWidth', 2); wolffd@0: wolffd@0: xvals = (-1:0.01:1)'; wolffd@0: nsample = 10; % Number of samples from prior. wolffd@0: hold on wolffd@0: plot([-1 0; 1 0], [0 ymin; 0 ymax], 'b--'); wolffd@0: net = gp(1, gptype); wolffd@0: net.bias = bias; wolffd@0: net.noise = noise; wolffd@0: net.inweights = inweights; wolffd@0: if strcmp(gptype, 'sqexp') wolffd@0: net.fpar = fpar; wolffd@0: else wolffd@0: fpar2 = get(findobj('Tag', 'fpar2slider'), 'Value'); wolffd@0: net.fpar = [fpar fpar2]; wolffd@0: end wolffd@0: cn = gpcovar(net, xvals); wolffd@0: cninv = inv(cn); wolffd@0: cnchol = chol(cn); wolffd@0: set(gca, 'DefaultLineLineWidth', 1); wolffd@0: for n = 1:nsample wolffd@0: y = (cnchol') * randn(size(xvals)); wolffd@0: plot(xvals, y, 'y'); wolffd@0: end wolffd@0: wolffd@0: watchoff(oldFigNumber); wolffd@0: wolffd@0: elseif strcmp(action, 'help'), wolffd@0: wolffd@0: % Provide help to user. wolffd@0: wolffd@0: oldFigNumber=watchon; wolffd@0: wolffd@0: helpfig = figure('Position', [100 100 480 400], ... wolffd@0: 'Name', 'Help', ... wolffd@0: 'NumberTitle', 'off', ... wolffd@0: 'Color', [0.8 0.8 0.8], ... wolffd@0: 'Visible','on'); wolffd@0: wolffd@0: % The HELP TITLE BAR frame wolffd@0: uicontrol(helpfig, ... wolffd@0: 'Style','frame', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'HorizontalAlignment', 'center', ... wolffd@0: 'Position', [0.05 0.82 0.9 0.1], ... wolffd@0: 'BackgroundColor',[0.60 0.60 0.60]); wolffd@0: wolffd@0: % The HELP TITLE BAR text wolffd@0: uicontrol(helpfig, ... wolffd@0: 'Style', 'text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position', [0.26 0.85 0.6 0.05], ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'String', 'Help: Sampling from a Gaussian Process Prior'); wolffd@0: wolffd@0: helpstr1 = strcat(... wolffd@0: 'This demonstration shows the effects of sampling from a Gaussian', ... wolffd@0: ' process prior. The parameters bias, noise, inweights and fpar', ... wolffd@0: ' control the corresponding terms in the covariance function of the',... wolffd@0: ' Gaussian process. Their values can be adjusted on a linear scale',... wolffd@0: ' using the sliders, or by typing values into the text boxes and',... wolffd@0: ' pressing the return key. After setting these values, press the',... wolffd@0: ' ''Sample'' button to see a new sample from the prior.'); wolffd@0: wolffd@0: helpstr2 = strcat(... wolffd@0: 'Observe how inweights controls horizontal length-scale of the',... wolffd@0: ' variation in the functions, noise controls the roughness of the',... wolffd@0: ' functions, and the bias controls the size of the', ... wolffd@0: ' vertical offset of the signal.'); wolffd@0: helpstr3 = strcat(... wolffd@0: 'There are two types of covariance function supported by', ... wolffd@0: ' Netlab which can be selected using the ''Covariance Function', ... wolffd@0: ' Type'' menu.'); wolffd@0: helpstr4 = strcat(... wolffd@0: 'The squared exponential has a single fpar which', ... wolffd@0: ' controls the vertical scale of the process.'); wolffd@0: helpstr5 = strcat(... wolffd@0: 'The rational quadratic has two fpar values. The first is', ... wolffd@0: ' is a scale parameter inside the rational function like the',... wolffd@0: ' first fpar for the squared exponential covariance, while the', ... wolffd@0: ' second gives the exponent of the rational function (i.e. the',... wolffd@0: ' rate of decay of the covariance function.'); wolffd@0: % Set up cell array with help strings wolffd@0: hstr(1) = {helpstr1}; wolffd@0: hstr(2) = {''}; wolffd@0: hstr(3) = {helpstr2}; wolffd@0: hstr(4) = {''}; wolffd@0: hstr(5) = {helpstr3}; wolffd@0: hstr(6) = {''}; wolffd@0: hstr(7) = {helpstr4}; wolffd@0: hstr(8) = {''}; wolffd@0: hstr(9) = {helpstr5}; wolffd@0: wolffd@0: % The HELP text wolffd@0: helpui = uicontrol(helpfig, ... wolffd@0: 'Style', 'Text', ... wolffd@0: 'Units', 'normalized', ... wolffd@0: 'ForegroundColor', [0 0 0], ... wolffd@0: 'HorizontalAlignment', 'left', ... wolffd@0: 'BackgroundColor', [1 1 1], ... wolffd@0: 'Min', 0, ... wolffd@0: 'Max', 2, ... wolffd@0: 'Position', [0.05 0.2 0.9 0.57]); wolffd@0: [hstrw, newpos] = textwrap(helpui, hstr); wolffd@0: set(helpui, 'String', hstrw, 'Position', [0.05, 0.2, 0.9 newpos(4)]); wolffd@0: wolffd@0: % The CLOSE button wolffd@0: uicontrol(helpfig, ... wolffd@0: 'Style','push', ... wolffd@0: 'Units','normalized', ... wolffd@0: 'BackgroundColor', [0.6 0.6 0.6], ... wolffd@0: 'Position',[0.4 0.05 0.2 0.1], ... wolffd@0: 'String','Close', ... wolffd@0: 'Callback','close(gcf)'); wolffd@0: wolffd@0: watchoff(oldFigNumber); wolffd@0: wolffd@0: end; wolffd@0: