www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xregcubic/modelproperties.m
function p = modelproperties(m,p) %MBCMODELPROPERTIES interface to model properties % % p = modelproperties(m,p); % Order Polynomial Order % InteractionOrder Maximum Interaction Order % TransformInputRange Transform Input Range % Copyright 2006-2007 The MathWorks, Inc. ID = getType(m); [p,OK] = PersistentStore(p,ID); if ~OK nf = nfactors(m); %% Properties for Polynomials % p = addprop(p,'Order',... @( m ) get( m, 'order' ),@( m,v ) i_SetOrder( m, v ),... 'vector int',{[0 Inf],nf},... 'Polynomial order'); p = addprop(p,'InteractionOrder',... @( m ) get( m, 'maxinteract' ),... @i_SetInteractionOrder,... 'int',[0 Inf],... 'Maximum order of interaction terms'); p = addprop(p,'TransformInputRange',... @( m ) i_GetTransformInputRange( m ),@( m,v ) i_SetTransformInputRange( m, v ),... 'boolean',[],... 'Transform inputs'); % add base linear model properties p = modelproperties(m.xreglinear,p); PersistentStore(p,ID); end %% subfunctions to do the set and get %% Polynomial order set method function m = i_SetOrder( m, v ) error( i_Assert( i_IsInteger( v ), 'Order must be integer valued.' ) ); error( i_Assert( all( v >= 0 ), 'Order must be non-negative.' ) ); error( i_Assert( numel( v ) == nfactors( m ), ... 'Order must be a vector with exactly one element for each factor.' ) ); m = reset( m ); m = set( m, 'order', v ); %% Interaction order set method function m = i_SetInteractionOrder( m, v ) error( i_Assert( i_IsInteger( v ), 'InteractionOrder must be integer valued.' ) ); error( i_Assert( isscalar( v ), 'InteractionOrder must be a scalar.' ) ); error( i_Assert( v >= 0, 'InteractionOrder must be non-negative.' ) ); maxallowedinteract = get( m, 'maxallowedinteract' ); error( i_Assert( v <= maxallowedinteract, sprintf( ... 'InteractionOrder must be less than or equal to %d for this model', ... maxallowedinteract ) ) ); m = reset( m ); m = set( m, 'maxinteract', v ); %% Transform Input Range get and set methods function v = i_GetTransformInputRange( m ) % If the model is not a uncode poly, then we are transforming % the input range to [-1, 1]. v = ~isa( m, 'xreguncodedpoly' ); %% function m = i_SetTransformInputRange( m, newValue ) m = reset( m ); oldValue = i_GetTransformInputRange( m ); if oldValue && ~newValue, % Set from true to false, i.e., % convert xregcubic to xreguncodedpoly m = xreguncodedpoly( m ); elseif ~oldValue && newValue, % set from false to true, % convert xreguncodedpoly to xregcubic m = xregcubic( m ); end %% TermStatus %% Helper Sub-functions function e = i_Assert( tf, msg ) %% % ASSERT Error if |tf| is false with the error message |msg| if tf, e = []; else e = struct( ... 'identifier', 'mbc:mbcmodelextensions:polynomialproperties:InvalidInput', ... 'message', msg ); end %% function tf = i_IsInteger( v ) %% % Check that array contains integers (not necessarily interger types). % % See also |isinteger|. tf = all( round( v(:) ) == v(:) );