メインコンテンツ

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

R2026b

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

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

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

sin、cos、min、max、abs などの数学関数は、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_num と comp_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 つの複素数入力 u1 と u2 を取得して、この 2 つの複素数の商を出力 y として返します。

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

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

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

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

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

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

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

C チャートで複素数データを使用する場合のルール

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

C をアクション言語として使用する Stateflow チャートで複素数データを使用する場合は、以下のルールが適用されます。

C チャートは複素数表記法 (a + bi) (a と b は実数) をサポートしていません。このため、ステート アクション、遷移条件とアクションまたは C チャートのすべてのステートメントでは、複素数表記法を使用できません。

複素数を定義するには、複素数データの表記法の説明に従って complex 演算子を使用します。

sin、cos、min、max、abs などの数学演算は、C チャートの複素数データでは機能しません。ただし、これらの演算では、MATLAB 関数を使用できます。

詳細については、MATLAB 関数による数学関数演算の実行を参照してください。

C チャートで他の数学演算のオペランドを混在させた場合は、モデルをシミュレーションしようとするとエラーが表示されます。

除算で複素数オペランドと実数オペランドを混在させるには、MATLAB 関数による複素数の除算の実行 の説明に従って、MATLAB 関数を使用します。

ヒント

除算でオペランドを混在させる他の方法としては、C チャートで complex、real および imag 演算子を使用する方法があります。

y = x1/x2 (x1 は複素数、x2 は実数) を計算すると仮定します。この計算は、以下のように書き換えることができます。

y = complex(real(x1)/x2, imag(x1)/x2)

詳細については、複素数の実数部分と虚数部分へのアクセスを参照してください。

基本データ型 ml、struct または boolean で複素数データを定義した場合は、モデルのシミュレーションを試みた時点でエラーが表示されます。

複素数データの初期値を定義する場合には、実数値のみを使用してください。[データ] プロパティ ダイアログ ボックスで初期値を設定する方法の詳細は、追加のプロパティ を参照してください。

複素数データを定義する際には、[データ] プロパティ ダイアログ ボックスで、[最小値] および [最大値] フィールドに値を入力しないでください。これらのフィールドに値を入力した場合は、モデルのシミュレーションを開始した時点でエラー メッセージが表示されます。

複素数値を実数データ型に代入した場合は、モデルのシミュレーションを開始した時点でエラーが表示されます。

メモ

複素数データ型には、実数値と複素数値の両方を代入できます。

この制約は、以下のタイプのチャート関数に適用されます。

  • グラフィカル関数

  • 真理値表関数

  • MATLAB 関数

  • Simulink 関数

C チャートが複素数型の関数入力に実数値を渡す場合、モデルをシミュレーションしようとするとエラーが表示されます。

時間を複素数として定義できないため、複素数データを時相論理演算子の引数として使用することはできません。

参考

トピック