Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデルの線形化

モデルの線形化について

Simulink® 製品では、状態空間行列 ABC および D の形式の線形モデルを抽出するための関数 linmodlinmod2 および dlinmod を提供しています。状態空間行列は、次のように線形の入出力関係を記述します。

x˙=Ax+Buy=Cx+Du,

x、u、y はそれぞれ状態、入力、出力ベクトルです。たとえば、次のモデルは lmod と呼ばれます。

このシステムの線形モデルを抽出するには、次のコマンドを入力します。

[A,B,C,D] = linmod('lmod')

A =
   -2    -1    -1
    1     0     0
    0     1    -1
B =
    1
    0
    0
C =
    0     1     0
    0     0    -1
D =
    0
    1

入力と出力は、Ports & Subsystems ライブラリの Inport ブロックと Outport ブロックを使用して定義しなければなりません。Sources ブロックと Sinks ブロックは、入力と出力としては機能しません。Inport ブロックは、Sum ブロックを使用して Source のブロックと併用できます。データが状態空間形式になるか LTI オブジェクトに変換されると、Control System Toolbox™ 製品の関数を適用してさらに解析できます。

  • LTI オブジェクトへの変換

    sys = ss(A,B,C,D);
    
  • ボード位相と振幅周波数プロット

    bode(A,B,C,D) or bode(sys)
    
  • 線形化した時間応答

    step(A,B,C,D) or step(sys)
    impulse(A,B,C,D) or impulse(sys)
    lsim(A,B,C,D,u,t) or lsim(sys,u,t)
    

Control System Toolbox 製品と Robust Control Toolbox™ 製品の他の関数を使用して線形制御システムを設計できます。

モデルが非線形の場合、線形化されたモデルを抽出する操作点を選択できます。linmod の追加の引数が操作点を指定します。

[A,B,C,D] = linmod('sys', x, u)

離散システムや連続系と離散系の混在するシステムでは、線形化に関数 dlinmod を使用します。この関数の呼び出し構文は、2 番目の右辺引数に線形化を実行するサンプル時間が含まれていなければならない点を除いて、linmod と同じです。

参照モデルの線形化

Model ブロックが含まれた Simulink® 環境から線形モデルを抽出する目的で、linmod を使用できます。たとえば、参照モデル mdlref_dynamics と最上位モデル mdlref_f14 を開きます。

open_system('mdlref_dynamics');
open_system('mdlref_f14');

mdlref_f14 モデルで、Aircraft Dynamics Model ブロックはモデル mdlref_dynamics を参照します。

mdlref_f14 モデルを線形化するには、linmod コマンドを使用します。

[A,B,C,D] = linmod('mdlref_f14');
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: mdlref_dynamics

Build Summary

Simulation targets built:

Model            Action                       Rebuild Reason                              
==========================================================================================
mdlref_dynamics  Code generated and compiled  mdlref_dynamics_msf.mexa64 does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 19.694s

その結果の状態空間モデルは、参照モデルを含む完全な mdlref_f14 モデルです。

Model ブロックが含まれているモデルの場合は、状態と入力操作点を使用して linmod を呼び出すことができます。入力操作点を使用すると、状態ベクトル x は最上位モデルとその他の参照モデルの合計状態ベクトルを参照します。状態ベクトルは、構造体の形式を使用して入力しなければなりません。完全な状態ベクトルを取得するには、getInitialState を使用します。

x = Simulink.BlockDiagram.getInitialState(topModelName)

ヒント

通常モードでは、linmod コマンドはブロック別の線形化アルゴリズムを参照先モデルのブロックに適用します。モデル ブロックがアクセラレータ モードの場合、linmod コマンドは数値摂動法を使用して参照先モデルを線形化します。マルチレートのモデル ブロックをアクセラレータ モードで線形化する機能には制限があるため、参照先モデルを使用して線形化する場合は、モデル ブロックが参照するすべてのモデルにノーマル モードのシミュレーションを使用する必要があります。

'v5' アルゴリズムを使用した線形化

linmod コマンドを引数 'v5' とともに呼び出すと、MATLAB® ソフトウェア Version 5.3 より前に作成された摂動アルゴリズムが起動します。このアルゴリズムを使用すると、モデルのあらゆる状態と入力の摂動の実行に使用される摂動の値も指定できます。

[A,B,C,D]=linmod('sys',x,u,para,xpert,upert,'v5')
Derivative または Transport Delay ブロックが含まれたモデルを、'v5' オプションの linmod を使用して線形化する方法は、困難な場合があります。線形化の前に、問題を回避するために特別設計されたブロックに置き換えてください。これらのブロックは、Simulink Extras ライブラリ内のLinearization サブライブラリにあります。

Extrasライブラリには、[Blocksets & Toolboxes] アイコンを開いてアクセスします。

  • Derivative ブロックの場合は、Switched derivative for linearization を使用します。

Derivative ブロックを使用する場合は、他のブロックに導関数の項を組み入れることもできます。たとえば、Transfer Fcn ブロックと直列の Derivative ブロックがある場合、次の形式の 1 つの Transfer Fcn ブロックを使用した方がうまく実装できますが、これは常に可能であるとは限りません。

ss+a.

この例では、図の左側のブロックを右側のブロックに置き換えることができます。

参考

|

関連するトピック