Main Content

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

sparss

スパース 1 次状態空間モデル

    説明

    有限要素解析 (FEA) パッケージから取得した行列を使用してスパース記述子状態空間モデルを表すには、sparss を使用します。FEA には、個別にモデル化されたコンポーネントに機械システムが分割される、動的な部分構造の概念が含まれます。これらのコンポーネントは、内力の変位と平衡の整合性を表す剛体または半剛体物理インターフェイスを使用して結合されます。このタイプのモデル化による結果の行列は、1 つのスパース パターンで非常に大規模になります。したがって、線形解析を実行するときに MATLAB® でこのような大きな状態空間モデルを表すには、sparss を使用するのが効率的です。sparss を使用して、2 次 mechss モデル オブジェクトを sparss オブジェクトに変換することもできます。

    sparss モデル オブジェクトを使用して、SISO または MIMO 状態空間モデルを連続時間または離散時間で表現できます。連続時間では、1 次スパース状態空間モデルは次の形式をとります。

    Edxdt=A x(t)+B u(t)y(t)=C x(t)+D u(t)

    ここで、xu および y はそれぞれ状態、入力および出力を表し、ABCD および E は状態空間行列です。sparss オブジェクトは、スパース行列 ABCD および E を、サンプル時間、名前、入力および出力に固有の遅延などの情報と共に格納している MATLAB の状態空間モデルを表します。

    sparss オブジェクトを使用して、次を実行できます。

    • 時間領域および周波数領域応答解析を実行します。

    • 他の LTI モデルとの信号ベースの接続を指定します。

    • 連続時間表現および離散時間表現間でモデルを変換します。

    詳細については、スパース モデルの基礎を参照してください。

    作成

    説明

    sys = sparss(A,B,C,D,E) は、次の形式の連続時間 1 次スパース状態空間モデル オブジェクトを作成します。

    Edxdt=A x(t)+B u(t)y(t)=C x(t)+D u(t)

    たとえば、Nx 個の状態、Ny 個の出力、Nu 個の入力をもつプラントについて考えます。1 次状態空間行列は次のとおりです。

    • A は、NxNx 列の実数値または複素数値を含むスパース状態行列です。

    • BNxNu 列の実数値または複素数値を含む、入力から状態へのスパース行列です。

    • NyNx 列の実数値または複素数値を含む、状態から出力へのスパース行列です。

    • D は、NyNu 列の実数値または複素数値を含むスパース ゲインまたは入力から出力への行列です。

    • E は、行列 A と同じサイズのスパース質量行列です。E を省略すると、sparssE 単位行列が設定されます。

    sys = sparss(A,B,C,D,E,ts) は、次の形式を使用してサンプル時間 ts の離散時間スパース状態空間モデルを作成します。

    E x[k+1]=A x[k]+B u[k]y[k]=C x[k]+D u[k]

    サンプル時間を未指定のままにするには、ts-1 に設定します。E が単位行列の場合、E[] として設定するか、A がスカラーでない場合は E を省略できます。

    sys = sparss(D) は、静的ゲイン D を表すスパース状態空間モデルを作成します。出力状態空間モデルは sparss([],[],[],D,[]) と等価です。

    sys = sparss(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して 1 次スパース状態空間モデルのプロパティを設定します。この構文は、前述の任意の入力引数の組み合わせで使用します。

    sys = sparss(ltiSys) は、動的システム モデル ltiSys を 1 次スパース状態空間モデルに変換します。

    入力引数

    すべて展開する

    状態行列。NxNx 列のスパース行列として指定します。ここで Nx は状態の数です。この入力はプロパティ A の値を設定します。

    入力から状態への行列。NxNu 列のスパース行列として指定します。ここで Nx は状態の数、Nu は入力の数です。この入力はプロパティ B の値を設定します。

    状態から出力への行列。NyNx 列のスパース行列として指定します。ここで Nx は状態の数、Ny は出力の数です。この入力はプロパティ C の値を設定します。

    入力から出力への行列。NyNu 列のスパース行列として指定します。ここで Ny は出力の数、Nu は入力の数です。この入力はプロパティ D の値を設定します。

    質量行列。NxNx 列のスパース行列として指定します。ここで Nx は状態の数です。この入力はプロパティ E の値を設定します。

    スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。

    1 次スパース状態空間形式に変換する動的システム。SISO または MIMO 動的システム モデル、または動的システム モデルの配列として指定します。変換できる動的システムには次のものが含まれます。

    • mechsstfzpkss または pid モデルなどの連続時間または離散時間の数値 LTI モデル。

    出力引数

    すべて展開する

    出力システム モデル。sparss モデル オブジェクトとして返されます。

    プロパティ

    すべて展開する

    状態行列。NxNx 列のスパース行列として指定します。ここで Nx は状態の数です。

    入力から状態への行列。NxNu 列のスパース行列として指定します。ここで Nx は状態の数、Nu は入力の数です。

    状態から出力への行列。NyNx 列のスパース行列として指定します。ここで Nx は状態の数、Ny は出力の数です。

    入力から出力への行列。NyNu 列のスパース行列として指定します。ここで Ny は出力の数、Nu は入力の数です。D は静的ゲイン行列とも呼ばれ、定常状態の条件下での入力に対する出力の比率を表します。

    質量行列。NxNx 列のスパース行列として指定します。EA と同じサイズです。

    微分代数方程式 (DAE) は "微分指数" があることが特徴です。これはその特異度の尺度を示します。線形 DAE は、E11A22 が可逆行列になっている次の形式に変換可能な場合、指数は ≤1 です。

    E11x˙1=A11x1+A12x2+B1u0=A21x1+A22x2+B2u

    x2 が空の場合、DAE の指数は 0 です。x2 が空でない場合、指数は 1 です。つまり、AE の行と列の置換によって上記の形式に変換できる場合、線形 DAE の構造指数は ≤1 です。システムのインパルス応答の計算など一部の機能は、構造指数が 1 未満の DAE に制限されます。

    DAE 指数の詳細については、微分代数方程式 (DAE) の求解を参照してください。

    状態ベクトル コンポーネント、コンポーネント間のインターフェイス、およびコンポーネントを接続する内部信号を含む状態区分情報。次のフィールドを含む構造体配列として指定します。

    • Type — タイプにはコンポーネント、信号、または物理インターフェイスが含まれる

    • Name — コンポーネント、信号、または物理インターフェイスの名前

    • Size — 区分内の状態またはノードの数

    showStateInfo を使用してスパース状態空間モデルの区分情報を表示できます。また、xsort を使用してスパース モデルで区分を並べ替えることもできます。

    モデル解析のオプション。次のフィールドをもつ構造体として指定します。

    • UseParallel — 並列計算を有効にする場合はこのオプションを true に設定し、無効にする場合は false に設定します。並列計算は既定で無効になっています。UseParallel オプションには、Parallel Computing Toolbox™ ライセンスが必要です。

    • DAESolver — このオプションを使用して微分代数方程式 (DAE) ソルバーのタイプを選択します。選択できる DAE ソルバーは次のとおりです。

      • 'trbdf2' — 精度 o(h^2) の固定ステップ ソルバー。ここで、h はステップ サイズです。[1]

      • 'trbdf3' — 精度 o(h^3) の固定ステップ ソルバー。ここで、h はステップ サイズです。

      ステップ サイズを小さくすると、精度が向上し、数値的減衰が無視される周波数範囲が広がります。'trbdf3' は、'trbdf2' よりもおよそ 50% 計算量が多くなります。

    モデルの内部遅延。ベクトルとして指定します。内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細については、むだ時間のある閉フィードバック ループを参照してください。

    連続時間モデルの場合、内部遅延はモデルの TimeUnit プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプル時間 Ts の整数倍として表現されます。たとえば InternalDelay = 3 は 3 サンプリング周期の遅延を意味します。

    内部遅延の値はプロパティ InternalDelay を使用して変更できます。ただし、sys.InternalDelay のエントリの数は、モデルの構造に組み込まれているので変更できません。

    各入力チャネルの入力遅延。次のいずれかとして指定します。

    • スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。

    • Nu 行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu は入力の数です。

    連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。

    詳細については、線形システムでのむだ時間を参照してください。

    各出力チャネルの出力遅延。次のいずれかとして指定します。

    • スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。

    • Ny 行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny は出力の数です。

    連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。

    詳細については、線形システムでのむだ時間を参照してください。

    サンプル時間。以下として指定します。

    • 0 (連続時間システムの場合)。

    • 離散時間システムのサンプリング周期を表す正のスカラー。TsTimeUnit プロパティによって指定される時間単位で指定します。

    • -1 (サンプル時間が指定されていない離散時間システムの場合)。

    メモ

    Ts を変更してもモデルの離散化やリサンプリングは行われません。連続時間表現と離散時間表現の間の変換を行うには、c2dd2c を使用します。離散時間システムのサンプル時間を変更するには、d2d を使用します。

    時間変数の単位。次のいずれかとして指定します。

    • 'nanoseconds'

    • 'microseconds'

    • 'milliseconds'

    • 'seconds'

    • 'minutes'

    • 'hours'

    • 'days'

    • 'weeks'

    • 'months'

    • 'years'

    TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

    入力チャネル名。以下のいずれかとして指定します。

    • 文字ベクトル (単入力モデルの場合)。

    • 文字ベクトルの cell 配列 (多入力モデルの場合)。

    • '' (いずれの入力チャネルにも名前を指定しない場合)。

    あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のようになります。

    sys.InputName = 'controls';

    入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

    省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

    InputName の使用目的は次のとおりです。

    • モデル表示とプロット上のチャネルの識別

    • MIMO システムのサブシステムの抽出

    • モデル相互接続時における接続点の指定

    入力チャネル単位。以下のいずれかとして指定します。

    • 文字ベクトル (単入力モデルの場合)。

    • 文字ベクトルの cell 配列 (多入力モデルの場合)。

    • '' (いずれの入力チャネルにも単位を指定しない場合)。

    InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。

    入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。以下に例を示します。

    sys.InputGroup.controls = [1 2];
    sys.InputGroup.noise = [3 5];

    これは、入力チャネル 12、および 35 をそれぞれ含む、controls および noise という名前の入力グループを作成します。その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

    sys(:,'controls')

    既定では、InputGroup はフィールドのない構造体です。

    出力チャネル名。次のいずれかとして指定されます。

    • 文字ベクトル (単出力モデルの場合)。

    • 文字ベクトルの cell 配列 (多出力モデルの場合)。

    • '' (いずれの出力チャネルにも名前を指定しない場合)。

    あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力力モデルである場合は、以下のようになります。

    sys.OutputName = 'measurements';

    出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

    省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.ysys.OutputName と同じです。

    OutputName の使用目的は次のとおりです。

    • モデル表示とプロット上のチャネルの識別

    • MIMO システムのサブシステムの抽出

    • モデル相互接続時における接続点の指定

    出力チャネル単位。次のいずれかとして指定されます。

    • 文字ベクトル (単出力モデルの場合)。

    • 文字ベクトルの cell 配列 (多出力モデルの場合)。

    • '' (いずれの出力チャネルにも単位を指定しない場合)。

    OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。

    出力チャネル グループ。構造体として指定します。OutputGroup プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。以下に例を示します。

    sys.OutputGroup.temperature = [1];
    sys.InputGroup.measurement = [3 5];

    これは、出力チャネル 1、および 35 をそれぞれ含む、temperature および measurement という出力グループを作成します。その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

    sys('measurement',:)

    既定では、OutputGroup はフィールドのない構造体です。

    システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。

    システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。

    システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

    モデル配列のサンプリング グリッド。構造体配列として指定します。

    SamplingGrid を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。

    構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。

    たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。

     sysarr.SamplingGrid = struct('time',0:10)

    同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成できます。次のコードは (zeta,w) の値を M にマッピングします。

    [zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
    M.SamplingGrid = struct('zeta',zeta,'w',w)

    既定では、SamplingGrid はフィールドのない構造体です。

    オブジェクト関数

    以下のリストに、sparss モデル オブジェクトで使用できる関数を示します。

    すべて展開する

    mechssスパース 2 次状態空間モデル
    getx0初期条件を mechss オブジェクトから sparss オブジェクトにマッピング
    fullスパース モデルを密度の高いストレージに変換する
    imp2expConvert implicit linear relationship to explicit input-output relation
    invInvert models
    getDelayModel内部遅延の状態空間表現
    sparssdata1 次スパース状態空間モデル データにアクセスする
    mechssdata2 次スパース状態空間モデル データにアクセスする
    showStateInfo状態区分情報
    spysparss モデル オブジェクトのスパース パターンを可視化する
    c2d連続時間から離散時間へモデルを変換
    d2c離散時間から連続時間へモデルを変換
    d2d離散時間モデルのリサンプリング
    step動的システムのステップ応答プロット、ステップ応答データ
    impulse動的システムのインパルス応答プロット、インパルス応答データ
    initial状態空間モデルの初期条件応答
    lsim動的システムの任意の入力へのシミュレーションされた時間応答をプロットする。シミュレーションされた応答データ
    bode周波数応答、またはゲインと位相データのボード線図
    nyquist周波数応答のナイキスト線図
    nichols周波数応答のニコルス線図
    sigma動的システムの特異値プロット
    passiveplot受動性インデックスの周波数の関数としての計算またはプロット
    dcgainLTI システムの低周波数 (DC) ゲイン
    evalfr与えられた周波数における周波数応答の評価
    freqrespグリッド上の周波数応答
    interfacemechss モデルのコンポーネント間の物理接続の指定
    xsort状態区分に基づいて状態を並べ替える
    feedback複数のモデルのフィードバック接続
    parallel2 つのモデルの並列接続
    append入力と出力を追加して、モデルをグループ化する
    connect動的システムのブロック線図相互接続
    lft2 つのモデルの一般化されたフィードバック相互接続 (Redheffer スター積)
    series2 つのモデルの直列接続

    すべて折りたたむ

    この例では、連続時間スパース 1 次状態空間モデルのスパース行列を含む sparseFOContinuous.mat について考えます。

    sparseFOContinuous.mat からスパース行列を抽出します。

    load('sparseFOContinuous.mat','A','B','C','D','E');

    sparss モデル オブジェクトを作成します。

    sys = sparss(A,B,C,D,E)
    Sparse continuous-time state-space model with 1 outputs, 1 inputs, and 199 states.
    
    Use "spy" and "showStateInfo" to inspect model structure. 
    Type "properties('sparss')" for a list of model properties. 
    Type "help sparssOptions" for available solver options for this model.
    

    出力 sys は、199 の状態、1 つの入力、および 1 つの出力を含む連続時間 sparss モデル オブジェクトです。

    spyコマンドを使用して、sparss モデル オブジェクトのスパース性を可視化できます。

    spy(sys)

    Figure contains an axes. The axes with title nnz: A=239, E=239, B=20, C=19, D=1. contains 7 objects of type line. These objects represent A, B, C, D.

    この例では、離散時間スパース 1 次状態空間モデルのスパース行列を含む sparseFODiscrete.mat について考えます。

    sparseFODiscrete.mat からスパース行列を抽出します。

    load('sparseFODiscrete.mat','A','B','C','D','E','ts');

    sparss モデル オブジェクトを作成します。

    sys = sparss(A,B,C,D,E,ts)
    Sparse discrete-time state-space model with 1 outputs, 1 inputs, and 398 states.
    
    Use "spy" and "showStateInfo" to inspect model structure. 
    Type "properties('sparss')" for a list of model properties. 
    Type "help sparssOptions" for available solver options for this model.
    

    出力 sys は、398 の状態、1 つの入力と 1 つの出力を含む離散時間 sparss モデル オブジェクトです。

    spyコマンドを使用して、sparss モデル オブジェクトのスパース性を可視化できます。

    spy(sys)

    Figure contains an axes. The axes with title nnz: A=518, E=837, B=56, C=18, D=1. contains 7 objects of type line. These objects represent A, B, C, D.

    sparss モデル オブジェクトのモデル プロパティを表示することもできます。

    properties('sparss')
    Properties for class sparss:
    
        A
        B
        C
        D
        E
        Scaled
        StateInfo
        SolverOptions
        InternalDelay
        InputDelay
        OutputDelay
        Ts
        TimeUnit
        InputName
        InputUnit
        InputGroup
        OutputName
        OutputUnit
        OutputGroup
        Notes
        UserData
        Name
        SamplingGrid
    

    静的ゲインの MIMO スパース 1 次状態空間モデルを作成します。

    次の 3 入力、2 出力の静的ゲイン行列について考えます。

    D=[157639]Static-gain matrix

    ゲイン行列を指定して、静的ゲインのスパース 1 次状態空間モデルを作成します。

    D = [1,5,7;6,3,9];
    sys = sparss(D);
    size(sys)
    Sparse state-space model with 2 outputs, 3 inputs, and 0 states.
    

    この例では、mechss モデル オブジェクト ltiSys を含む mechssModel.mat について考えます。

    mechssModel.mat から mechss モデル オブジェクトを読み込みます。

    load('mechssModel.mat','ltiSys');
    ltiSys
    Sparse continuous-time second-order model with 1 outputs, 1 inputs, and 872 nodes.
    
    Use "spy" and "showStateInfo" to inspect model structure. 
    Type "properties('mechss')" for a list of model properties. 
    Type "help mechssOptions" for available solver options for this model.
    

    1 次スパース表現に変換するには、sparss コマンドを使用します。

    sys = sparss(ltiSys)
    Sparse continuous-time state-space model with 1 outputs, 1 inputs, and 1744 states.
    
    Use "spy" and "showStateInfo" to inspect model structure. 
    Type "properties('sparss')" for a list of model properties. 
    Type "help sparssOptions" for available solver options for this model.
    

    質量行列 M はフル ランクであるため、結果の sparss モデル オブジェクト sys には mechss オブジェクト ltisys の 2 倍の数の状態が含まれます。質量行列がフル ランクでない場合、mechss モデルから変換された結果の sparss モデルの状態の数は、n2n になります。ここで、nmechss モデル オブジェクトのノード数です。

    この例では、スパース 1 次モデルを含む sparseFOSignal.mat について考えます。アクチュエータ、センサー、コントローラーを定義して、それらをフィードバック ループでプラントに接続します。

    スパース行列を読み込み、sparss オブジェクトを作成します。

    load sparseFOSignal.mat
    plant = sparss(A,B,C,D,E,'Name','Plant');

    次に、伝達関数を使用してアクチュエータとセンサーを作成します。

    act = tf(1,[1 2 3],'Name','Actuator');
    sen = tf(1,[6 7],'Name','Sensor');

    プラントの PID コントローラー オブジェクトを作成します。

    con = pid(1,1,0.1,0.01,'Name','Controller');

    feedback コマンドを使用して、プラント、センサー、アクチュエータ、およびコントローラーをフィードバック ループ内で接続します。

    sys = feedback(sen*plant*act*con,1)
    Sparse continuous-time state-space model with 1 outputs, 1 inputs, and 29 states.
    
    Use "spy" and "showStateInfo" to inspect model structure. 
    Type "properties('sparss')" for a list of model properties. 
    Type "help sparssOptions" for available solver options for this model.
    

    sparss オブジェクトは tf および PID モデルのオブジェクト タイプより優先されるため、結果のシステム syssparss オブジェクトになります。

    showStateInfo を使用してコンポーネントと信号グループを表示します。

    showStateInfo(sys)
    The state groups are:
    
        Type          Name       Size
      -------------------------------
      Component      Sensor         1
      Component      Plant         20
      Signal                        1
      Component     Actuator        2
      Signal                        1
      Component    Controller       2
      Signal                        1
      Signal                        1
    

    xsort を使用してコンポーネントと信号を並べ替えてから、コンポーネントと信号グループを表示します。

    sysSort = xsort(sys);
    showStateInfo(sysSort)
    The state groups are:
    
        Type          Name       Size
      -------------------------------
      Component      Sensor         1
      Component      Plant         20
      Component     Actuator        2
      Component    Controller       2
      Signal                        4
    

    コンポーネントが信号区分の前に順序付けされていることを確認します。信号は並べ替えられて、単一の区分にグループ化されます。

    spy を使用して結果のシステムのスパース パターンを可視化することもできます。

    spy(sysSort)

    Figure contains an axes. The axes with title nnz: A=141, E=123, B=3, C=1. contains 15 objects of type line. These objects represent A, B, C, D.

    参照

    [1] M. Hosea and L. Shampine. "Analysis and implementation of TR-BDF2." Applied Numerical Mathematics, vol. 20, no. 1-2, pp. 21-37, 1996.

    R2020b で導入