Main Content

代数ループの回避

この例では、モデル内で代数ループを回避することができる MATLAB System ブロックの作成方法を示します。

System object

System object を使用すると、MATLAB でのアルゴリズムの実装が可能になります。System object は入力が時間経過とともに変化する動的システムを実装およびシミュレーションするために特別に設計された、特殊な種類の MATLAB オブジェクトです。

System object を定義すれば、MATLAB System ブロックを使用してそれを Simulink モデルに含めることができます。

モデルの説明

この例には、モデル内のフィードバック ループで使用される MATLAB System ブロックがあります。フィードバック ループは入力値を累積するために使用され、その結果は Scope ブロックに表示されます。このモデルのフィードバックにより代数ループが生成されます。代数ループを解くには、非直達をもつブロックが Simulink に必要です。代数ループを回避するために、非直達をもつブロックがフィードバック ループで使用されます。このブロックは、最初に入力を受け取ることなく、現在のタイム ステップで出力を生成することができます。この例では、MATLAB System ブロックには非直達があります。

MATLAB System ブロックは、単位遅延を実装する System object UnitDelayNondirect を使用しています。出力には、フィードバック ループで入力信号の値が累積される方法が示されます。

System object クラスの定義

ブロック ダイアログで "Source code" ハイパーリンクをクリックすることで、MATLAB System ブロックによって使用される MATLAB ソース コードにアクセスできます。System object UnitDelayNondirectresetImploutputImpl、および updateImpl メソッドを実装します。System object には State と呼ばれる 1 つのプロパティがあります。

  • resetImplState プロパティを 0 に初期化する。

  • outputImplState に保存された値を返す。outputImpl では入力が使用されないため、この System object には非直達があります。

  • updateImpl は入力を使用して State を更新する。

classdef UnitDelayNondirect < matlab.System
% UnitDelayNondirect Delay input by one time step

properties(DiscreteState)
        State
    end

    methods(Access = protected)
        function resetImpl(obj)
            obj.State = 0; % Initialize states
        end
        function y = outputImpl(obj, ~)
            y = obj.State; % Output current state
            % Input is not used in this method
        end
        function updateImpl(obj,u)
            obj.State = u; % Update state with input
        end
    end
end

参考

|

関連するトピック