Main Content

C チャートで複素数データを使用する場合のベスト プラクティス

複素数データとは、その値が複素数に該当するデータです。たとえば、Simulink® モデルの Stateflow® チャートでは、3 + 5i という値の入力信号は複素数です。Stateflow チャートの複素数データを参照してください。

C をアクション言語として使用する Stateflow チャートで複素数データを使用するには、以下のベスト プラクティスに従います。

MATLAB 関数による数学関数演算の実行

sincosminmaxabs などの数学関数は、C チャートの複素数データでは機能しません。ただし、MATLAB® 関数を使用して、複素数データの数学関数演算を実行できます。

簡単な例

以下のチャートでは、MATLAB 関数が複素数の絶対値を計算します。

Chart that calls MATLAB function myabs with a complex operand, u.

comp_num の値は 1+2i です。絶対値を計算すると 2.2361 の答えがわかります。

絶対値の計算法

複素数の絶対値を検出すると仮定します。以下の手順に従います。

  1. このシグネチャを使って、以下の MATLAB 関数をチャートに追加します。

    y = myabs(u)
  2. 関数ボックスをダブルクリックし、エディターを開きます。

  3. エディターで、以下のコードを入力します。

    function y = myabs(u)
    %#codegen
    y = abs(u);

    関数 myabs は、複素数入力 u を取得して、絶対値を出力 y として返します。

  4. 複素数値を受け入れるように入力引数 u を設定します。

    1. モデル エクスプローラーを開きます。

    2. モデル エクスプローラーの [モデルの階層構造] ペインで、MATLAB 関数 myabs に移動します。

    3. モデル エクスプローラーの [コンテンツ] ペインで、入力引数 u を右クリックし、コンテキスト メニューから [プロパティ] を選択します。

    4. [データ] プロパティ ダイアログ ボックスの [実数/複素数] フィールドで [On] を選択し、[OK] をクリックします。

複素数型の関数入力に実数値を渡すことはできません。詳細は、C チャートで複素数データを使用する場合のルールを参照してください。

MATLAB 関数による複素数の除算の実行

複素数オペランドによる除算は、C チャートでは二項演算または代入演算としては使用できません。ただし、MATLAB 関数を使用して、複素数データの除算を実行できます。

簡単な例

以下のチャートでは、MATLAB 関数は 2 つの複素数オペランドの除算を実行します。

Chart that calls MATLAB function mydiv with two complex operands, u1 and u2.

comp_numcomp_den の値は、1+2i および 3+4i となります。これらの値を除算すると、0.44+0.08i の答えがわかります。

複素数の除算の実行方法

以下のように 2 つの複素数を除算します。

  1. この関数シグネチャを使って、以下の MATLAB 関数をチャートに追加します。

    y = mydiv(u1, u2)
  2. 関数ボックスをダブルクリックし、エディターを開きます。

  3. エディターで、以下のコードを入力します。

    function y = mydiv(u1, u2)
    %#codegen
    y = u1 / u2;

    関数 mydiv は 2 つの複素数入力 u1u2 を取得して、この 2 つの複素数の商を出力 y として返します。

  4. 複素数値を受け入れるように入力引数と出力引数を設定します。

    1. モデル エクスプローラーを開きます。

    2. モデル エクスプローラーの [モデルの階層構造] ペインで、MATLAB 関数 mydiv に移動します。

    3. 入力引数と出力引数ごとに、以下の手順に従います。

      1. モデル エクスプローラーの [コンテンツ] ペインで、引数を右クリックし、コンテキスト メニューから [プロパティ] を選択します。

      2. [データ] プロパティ ダイアログ ボックスの [実数/複素数] フィールドで [On] を選択し、[OK] をクリックします。

複素数型の関数入力に実数値を渡すことはできません。詳細は、C チャートで複素数データを使用する場合のルールを参照してください。

関連するトピック