メインコンテンツ

入力仕様の変更の取り扱い

R2026b

この例では、System object™ の入力仕様を制御する方法を示します。入力仕様が変更された場合に何が起きるかを制御できます。

オブジェクトの使用中に入力の実数/複素数、データ型、またはサイズを変更できるかどうかを制限することもできます。どちらの要素を制限する場合でも、ユーザーが release を呼び出すまでは変更できません。

入力仕様の変更への反応

入力のサイズ、データ型または実数/複素数が変化したときに System object のアルゴリズムまたはプロパティを変更するには、processInputSpecificationChangeImpl メソッドを実装します。System object への呼び出し間で入力仕様が変更された場合に行うアクションを指定します。

この例では、どちらかの入力が複素数である場合に processInputSpecificationChangeImpl によって isComplex プロパティが変更されます。

properties(Access = private)
    isComplex (1,1) logical = false;
end

methods (Access = protected)
    function processInputSpecificationChangeImpl(obj,input1,input2)
        if(isreal(input1) && isreal(input2))
            obj.isComplex = false;
        else
            obj.isComplex = true;
        end
    end
end

入力仕様の変更の制限

System object の使用中における入力の実数/複素数、データ型およびサイズを変更不可に指定するには、isInputComplexityMutableImpl、isInputDataTypeMutableImpl および isInputSizeMutableImpl の各メソッドが false を返すように実装します。System object 入力の一部の要素のみを制限する場合、これらのメソッドの 1 つまたは 2 つだけを含めることができます。

methods (Access = protected)
   function flag = isInputComplexityMutableImpl(~,~)
       flag = false;
   end
   function flag = isInputDataTypeMutableImpl(~,~)
       flag = false;
   end
   function flag = isInputSizeMutableImpl(~,~)
       flag = false;
   end
end

次の CounterSystem object は入力仕様の 3 つの要素をすべて制限します。

classdef Counter < matlab.System
    %Counter Count values above a threshold
    
    properties
        Threshold = 1
    end
    
    properties (DiscreteState)
        Count
    end
    
    methods
        function obj = Counter(varargin)
            setProperties(obj,nargin,varargin{:});
        end
    end
    
    methods (Access=protected)
        function resetImpl(obj)
            obj.Count = 0;
        end
        
        function y = stepImpl(obj, u1)
            if (any(u1 >= obj.Threshold))
                obj.Count = obj.Count + 1;
            end
            y = obj.Count;
        end
        
        function flag = isInputComplexityMutableImpl(~,~)
            flag = false;
        end
        
        function flag = isInputDataTypeMutableImpl(~,~)
            flag = false;
        end
        
        function flag = isInputSizeMutableImpl(~,~)
            flag = false;
        end
    end
end

参考

トピック