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