このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
sparss
説明
有限要素解析 (FEA) パッケージから取得した行列を使用してスパース記述子状態空間モデルを表すには、sparss
を使用します。FEA には、個別にモデル化されたコンポーネントに機械システムが分割される、動的な部分構造の概念が含まれます。これらのコンポーネントは、内力の変位と平衡の整合性を表す剛体または半剛体物理インターフェイスを使用して結合されます。このタイプのモデル化による結果の行列は、1 つのスパース パターンで非常に大規模になります。したがって、線形解析を実行するときに MATLAB® でこのような大きな状態空間モデルを表すには、sparss
を使用するのが効率的です。sparss
を使用して、2 次 mechss
モデル オブジェクトを sparss
オブジェクトに変換することもできます。
sparss
モデル オブジェクトを使用して、SISO または MIMO 状態空間モデルを連続時間または離散時間で表現できます。連続時間では、1 次スパース状態空間モデルは次の形式をとります。
ここで、x
、u
および y
はそれぞれ状態、入力および出力を表し、A
、B
、C
、D
および E
は状態空間行列です。sparss
オブジェクトは、スパース行列 A
、B
、C
、D
および E
を、サンプル時間、名前、入力および出力に固有の遅延などの情報と共に格納している MATLAB の状態空間モデルを表します。
sparss
オブジェクトを使用して、次を実行できます。
時間領域および周波数領域応答解析を実行します。
他の LTI モデルとの信号ベースの接続を指定します。
連続時間表現および離散時間表現間でモデルを変換します。
詳細については、スパース モデルの基礎を参照してください。
作成
構文
説明
は、次の形式の連続時間 1 次スパース状態空間モデル オブジェクトを作成します。sys
= sparss(A
,B
,C
,D
,E
)
たとえば、Nx
個の状態、Ny
個の出力、Nu
個の入力をもつプラントについて考えます。1 次状態空間行列は次のとおりです。
A
は、Nx
行Nx
列の実数値または複素数値を含むスパース状態行列です。B
はNx
行Nu
列の実数値または複素数値を含む、入力から状態へのスパース行列です。Ny
行Nx
列の実数値または複素数値を含む、状態から出力へのスパース行列です。D
は、Ny
行Nu
列の実数値または複素数値を含むスパース ゲインまたは入力から出力への行列です。E
は、行列A
と同じサイズのスパース質量行列です。E
を省略すると、sparss
にE
単位行列が設定されます。
入力引数
A
— 状態行列
Nx
行 Nx
列のスパース行列
状態行列。Nx
行 Nx
列のスパース行列として指定します。ここで Nx
は状態の数です。この入力はプロパティ A の値を設定します。
B
— 入力から状態への行列
Nx
行 Nu
列のスパース行列
入力から状態への行列。Nx
行 Nu
列のスパース行列として指定します。ここで Nx
は状態の数、Nu
は入力の数です。この入力はプロパティ B の値を設定します。
C
— 状態から出力への行列
Ny
行 Nx
列のスパース行列
状態から出力への行列。Ny
行 Nx
列のスパース行列として指定します。ここで Nx
は状態の数、Ny
は出力の数です。この入力はプロパティ C の値を設定します。
D
— 入力から出力への行列
Ny
行 Nu
列のスパース行列
入力から出力への行列。Ny
行 Nu
列のスパース行列として指定します。ここで Ny
は出力の数、Nu
は入力の数です。この入力はプロパティ D の値を設定します。
E
— 質量行列
Nx
行 Nx
列のスパース行列
質量行列。Nx
行 Nx
列のスパース行列として指定します。ここで Nx
は状態の数です。この入力はプロパティ E の値を設定します。
ts
— サンプル時間
スカラー
スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。
出力引数
sys
— 出力システム モデル
sparss
モデル オブジェクト
出力システム モデル。sparss
モデル オブジェクトとして返されます。
プロパティ
A
— 状態行列
Nx
行 Nx
列のスパース行列
状態行列。Nx
行 Nx
列のスパース行列として指定します。ここで Nx
は状態の数です。
B
— 入力から状態への行列
Nx
行 Nu
列のスパース行列
入力から状態への行列。Nx
行 Nu
列のスパース行列として指定します。ここで Nx
は状態の数、Nu
は入力の数です。
C
— 状態から出力への行列
Ny
行 Nx
列のスパース行列
状態から出力への行列。Ny
行 Nx
列のスパース行列として指定します。ここで Nx
は状態の数、Ny
は出力の数です。
D
— 入力から出力への行列
Ny
行 Nu
列のスパース行列
入力から出力への行列。Ny
行 Nu
列のスパース行列として指定します。ここで Ny
は出力の数、Nu
は入力の数です。D
は静的ゲイン行列とも呼ばれ、定常状態の条件下での入力に対する出力の比率を表します。
E
— 質量行列
Nx
行 Nx
列のスパース行列
質量行列。Nx
行 Nx
列のスパース行列として指定します。E
は A
と同じサイズです。
微分代数方程式 (DAE) は "微分指数" があることが特徴です。これはその特異度の尺度を示します。線形 DAE は、E11
と A22
が可逆行列になっている次の形式に変換可能な場合、指数は ≤1
です。
x2
が空の場合、DAE の指数は 0
です。x2
が空でない場合、指数は 1
です。つまり、A
と E
の行と列の置換によって上記の形式に変換できる場合、線形 DAE の構造指数は ≤1
です。システムのインパルス応答の計算など一部の機能は、構造指数が 1 未満の DAE に制限されます。
DAE 指数の詳細については、微分代数方程式 (DAE) の求解を参照してください。
StateInfo
— 状態区分情報
構造体配列
状態ベクトル コンポーネント、コンポーネント間のインターフェイス、およびコンポーネントを接続する内部信号を含む状態区分情報。次のフィールドを含む構造体配列として指定します。
Type
— タイプにはコンポーネント、信号、または物理インターフェイスが含まれるName
— コンポーネント、信号、または物理インターフェイスの名前Size
— 区分内の状態の数または自由度
showStateInfo
を使用してスパース状態空間モデルの区分情報を表示できます。また、xsort
を使用してスパース モデルで区分を並べ替えることもできます。
SolverOptions
— モデル解析のオプション
構造体
モデル解析のオプション。次のフィールドをもつ構造体として指定します。
UseParallel
— 並列計算を有効にする場合はこのオプションをtrue
に設定し、無効にする場合はfalse
に設定します。並列計算は既定で無効になっています。UseParallel
オプションには、Parallel Computing Toolbox™ ライセンスが必要です。DAESolver
— このオプションを使用して微分代数方程式 (DAE) ソルバーのタイプを選択します。選択できる DAE ソルバーは次のとおりです。'trbdf2'
— 精度o(h^2)
の固定ステップ ソルバー。ここで、h
はステップ サイズです。[1]'trbdf3'
— 精度o(h^3)
の固定ステップ ソルバー。ここで、h
はステップ サイズです。
ステップ サイズを小さくすると、精度が向上し、数値的減衰が無視される周波数範囲が広がります。
'trbdf3'
は、'trbdf2'
よりもおよそ 50% 計算量が多くなります。
InternalDelay
— モデルの内部遅延
ベクトル
モデルの内部遅延。ベクトルとして指定します。内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細については、むだ時間のある閉フィードバック ループを参照してください。
連続時間モデルの場合、内部遅延はモデルの TimeUnit
プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプル時間 Ts
の整数倍として表現されます。たとえば InternalDelay = 3
は 3 サンプリング周期の遅延を意味します。
内部遅延の値はプロパティ InternalDelay
を使用して変更できます。ただし、sys.InternalDelay
のエントリの数は、モデルの構造に組み込まれているので変更できません。
InputDelay
— 入力遅延
0
(既定値) | スカラー | Nu
行 1 列のベクトル
各入力チャネルの入力遅延。次のいずれかとして指定します。
スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。
Nu
行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu
は入力の数です。
連続時間システムの場合は、TimeUnit
プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts
の整数倍で入力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
OutputDelay
— 出力遅延
0
(既定値) | スカラー | Ny
行 1 列のベクトル
各出力チャネルの出力遅延。次のいずれかとして指定します。
スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。
Ny
行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny
は出力の数です。
連続時間システムの場合は、TimeUnit
プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts
の整数倍で出力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
TimeUnit
— 時間変数の単位
'seconds'
(既定値) | 'nanoseconds'
| 'microseconds'
| 'milliseconds'
| 'minutes'
| 'hours'
| 'days'
| 'weeks'
| 'months'
| 'years'
| ...
時間変数の単位。次のいずれかとして指定します。
'nanoseconds'
'microseconds'
'milliseconds'
'seconds'
'minutes'
'hours'
'days'
'weeks'
'months'
'years'
TimeUnit
の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit
を使用して、システム動作を変更せずに時間単位を変換します。
InputName
— 入力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル名。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys
が 2 入力モデルである場合は、以下のように入力します。
sys.InputName = 'controls';
入力名は自動的に {'controls(1)';'controls(2)'}
へと拡張されます。
省略形表記 u
を使用して、InputName
プロパティを参照できます。たとえば、sys.u
は sys.InputName
と同じです。
InputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
InputUnit
— 入力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル単位。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit
を使用して入力信号の単位を指定します。InputUnit
はシステムの動作に影響しません。
InputGroup
— 入力チャネル グループ
構造体
入力チャネル グループ。構造体として指定します。InputGroup
プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1
と 2
、および 3
と 5
をそれぞれ含む、controls
および noise
という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls
入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')
既定では、InputGroup
はフィールドのない構造体です。
OutputName
— 出力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル名。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys
が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';
出力名は自動的に {'measurements(1)';'measurements(2)'}
へと拡張されます。
省略形表記 y
を使用して OutputName
プロパティを参照することもできます。たとえば、sys.y
は sys.OutputName
と同じです。
OutputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
OutputUnit
— 出力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル単位。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit
を使用して出力信号の単位を指定します。OutputUnit
はシステムの動作に影響しません。
OutputGroup
— 出力チャネル グループ
構造体
出力チャネル グループ。構造体として指定します。OutputGroup
プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1
、および 3
と 5
をそれぞれ含む、temperature
および measurement
という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から measurement
出力にサブシステムを抽出できます。
sys('measurement',:)
既定では、OutputGroup
はフィールドのない構造体です。
Notes
— ユーザー指定のテキスト
{}
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO'
とします。
UserData
— ユーザー指定のデータ
[]
(既定値) | 任意の MATLAB データ型
システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。
Name
— システム名
''
(既定値) | 文字ベクトル
システム名。文字ベクトルとして指定します。たとえば、'system_1'
とします。
SamplingGrid
— モデル配列のサンプリング グリッド
構造体配列
モデル配列のサンプリング グリッド。構造体配列として指定します。
SamplingGrid
を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。
構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。
たとえば、t = 0:10
の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr
を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。
sysarr.SamplingGrid = struct('time',0:10)
同様に、2 つの変数 zeta
と w
を個別にサンプリングすることにより、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
モデル オブジェクトで使用できる関数を示します。
モデル化
データ アクセス
sparssdata | 1 次スパース状態空間モデル データにアクセスする |
mechssdata | 2 次スパース状態空間モデル データにアクセスする |
showStateInfo | スパース モデルの状態ベクトルのマッピング |
spy | スパース モデルのスパース パターンを可視化する |
時間および周波数応答
step | 動的システムのステップ応答プロット、ステップ応答データ |
impulse | 動的システムのインパルス応答プロット、インパルス応答データ |
initial | 状態空間モデルの初期状態に対するシステム応答 |
lsim | 動的システムの任意の入力へのシミュレーションされた時間応答をプロットする。シミュレーションされた応答データ |
bode | 周波数応答、または振幅と位相データのボード線図 |
nyquist | 周波数応答のナイキスト線図 |
nichols | 周波数応答のニコルス線図 |
sigma | 動的システムの特異値プロット |
passiveplot | 受動性インデックスの周波数の関数としての計算またはプロット |
dcgain | LTI システムの低周波数 (DC) ゲイン |
evalfr | 指定した周波数でのシステム応答の評価 |
freqresp | 周波数のグリッドでのシステム応答の評価 |
例
連続時間スパース 1 次モデル
この例では、連続時間スパース 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)
離散時間スパース 1 次モデル
この例では、離散時間スパース 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)
sparss モデル オブジェクトのモデル プロパティを表示することもできます。
properties('sparss')
Properties for class sparss: A B C D E Scaled StateInfo SolverOptions InternalDelay InputDelay OutputDelay InputName InputUnit InputGroup OutputName OutputUnit OutputGroup Notes UserData Name Ts TimeUnit SamplingGrid
静的ゲインの MIMO スパース 1 次モデル
静的ゲインの MIMO スパース 1 次状態空間モデルを作成します。
次の 3 入力、2 出力の静的ゲイン行列について考えます。
ゲイン行列を指定して、静的ゲインのスパース 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.
2 次スパース モデルを 1 次スパース モデル表現に変換
この例では、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 degrees of freedom. 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
モデルの状態の数は、n
~ 2n
になります。ここで、n
は mechss
モデル オブジェクトのノード数です。
フィードバック ループのスパース 1 次モデル
この例では、スパース 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
モデルのオブジェクト タイプより優先されるため、結果のシステム sys
は sparss
オブジェクトになります。
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)
参照
[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 で導入
参考
sparssdata
| mechss
| showStateInfo
| xsort
| full
| getx0
| spy
| Descriptor State-Space (Simulink)
トピック
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)