www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xregarx/set.m
function varargout = set( m, property, value ) %SET Implements the SET method for the XREGARX object. % SET(M,'<property>','<value>') sets the value of property for the % XREGARX model M. % % Properties: % Frequency % StaticModel % SET(M,'StaticModel','xreg<..>') % SET(M,'StaticModel',SM) % % DynamicOrder % Delay % OrderAndDelay (delmat) % % and those XREGMODEL properties that are SET'able. % % See also XREGMODEL/SET. % Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc. narginchk(3,3); switch lower( property ) case 'frequency' if length( value ) ~= 1, error(message('mbc:xregarx:InvalidValue')); elseif value <= 0, error(message('mbc:xregarx:InvalidValue1')); end m.Frequency = value(1); case 'staticmodel' StaticList = staticlist( m ); if ischar( value ), if ~ismember( value, { StaticList.Class } ), error(message('mbc:xregarx:InvalidValue2')); end % only reset static model if new class is different to old class if ~strcmp( value, class( m.StaticModel ) ), m = resetstaticmodel( m, value ); end else if ~ismember( class( value ), { StaticList.Class } ), error(message('mbc:xregarx:InvalidValue3')); elseif nfactors( value ) ~= nfactors( m.StaticModel ), error(message('mbc:xregarx:InvalidValue4')); end m.StaticModel = value; end case 'dynamicorder' value = floor( value(:)' ); if numel( value ) ~= nfactors( m ) + 1, error(message('mbc:xregarx:InvalidValue5')); elseif any( value < 0 ), error(message('mbc:xregarx:InvalidValue6')); elseif all( value < 1 ), error(message('mbc:xregarx:InvalidValue7')); else m.DynamicOrder = value; end resetstaticmodel( m ); case 'delay' value = floor( value(:)' ); if numel( value ) ~= nfactors( m ) + 1, error(message('mbc:xregarx:InvalidValue8')); elseif any( value < 0 ), error(message('mbc:xregarx:InvalidValue9')); elseif value(end) < 1, error(message('mbc:xregarx:InvalidValue10')); else m.Delay = value(:)'; end resetstaticmodel( m ); case {'orderanddelay', 'delmat'} if all( size( value ) ~= [2, nfactors( m ) + 1] ), error(message('mbc:xregarx:InvalidValue11')); elseif any( value < 0 ), error(message('mbc:xregarx:InvalidValue12')); elseif value(2,end) < 1, error(message('mbc:xregarx:InvalidValue13')); else m.DynamicOrder = value(1,:); m.Delay = value(2,:); end resetstaticmodel( m ); case 'initialconditions' delmat = get( m, 'OrderAndDelay' ); md = max( sum( delmat, 1 ) ) - 1; y0 = repmat(double(value(1)),md,1) ; m.StaticModel= set( m.StaticModel, 'InitialConditions' ,y0); case 'ycode' sm= m.StaticModel; yord= m.DynamicOrder(end); if yord y= double(value); % work out scaling for the output terms in the static model r= [min(y) max(y)]; if r(2)-r(1)< eps % handle constant inputs gracefully r(2)= r(1) + 1; end [Bnds,g,Tgt]= getcode(sm); Bnds(end-yord+1:end,1)= r(1); Bnds(end-yord+1:end,2)= r(2); sm= setcode(sm,Bnds,g,Tgt); m.StaticModel= sm; end otherwise m.xregmodel = set( m.xregmodel, property, value ); end if nargout == 1 varargout{1} = m; elseif isvarname( inputname(1) ), assignin( 'caller', inputname(1), m ); end