Main Content

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

operspec

説明

opspec = operspec(mdl) は、Simulink® モデル mdl に対して既定の操作点の仕様オブジェクトを返します。findop を使用する定常状態の操作点の平衡化には opspec を使用します。

opspec = operspec(mdl,dim) は、指定された次元 dim をもつ、既定の操作点の仕様オブジェクトの配列を返します。

すべて折りたたむ

Simulink モデルを開きます。

sys = 'watertank';
open_system(sys)

モデルに既定の操作点の仕様オブジェクトを作成します。

opspec = operspec(sys)
 Operating point specification for the Model watertank.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
	 spec:  dx = 0,  initial guess: 0
(2.) watertank/Water-Tank System/H
	 spec:  dx = 0,  initial guess: 1

Inputs: None 
----------

Outputs: None 
----------


opspec は、モデル内の 2 つの状態の仕様を含みます。モデルにルート レベルの入力端子や出力端子がないため、opspec には入力や出力の仕様が含まれません。出力仕様を追加するには、addoutputspecを使用します。

ドット表記を使用して各状態の操作点の仕様を変更します。たとえば、最初の状態を次のように構成します。

  • 定常状態にする。

  • 下限を 0 にする。

  • 平衡化の初期値を 2 にする。

opspec.States(1).SteadyState = 1;
opspec.States(1).x = 2;
opspec.States(1).Min = 0;

新しい operspec 変数は次の 3 つの方法で作成することができます。

  • operspec コマンドを使用する

  • 等号 (=) 演算子による割り当てを使用する

  • copyコマンドを使用する

= 演算子を使用すると変数がリンク付けられ、どちらの変数も基となる同じデータを指しています。copy コマンドを使用すると、独立した operspec オブジェクトになります。この例では operspec オブジェクトを両方の方法で作成し、それらの動作を検証します。

mdl = 'watertank';
open_system(mdl);
opspec1 = operspec(mdl)
 Operating point specification for the Model watertank.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
	 spec:  dx = 0,  initial guess: 0
(2.) watertank/Water-Tank System/H
	 spec:  dx = 0,  initial guess: 1

Inputs: None 
----------

Outputs: None 
----------

= 演算子による割り当てを使用して、新しい操作点の仕様オブジェクトを作成します。

opspec2 = opspec1;

opspec2 は、opspec1 と同じ基となるデータを指す operspec オブジェクトです。このリンクのために、2 つの operspec オブジェクトのプロパティを独立して変更することはできません。これを確認するには、opspec2 のプロパティを変更します。たとえば、最初の状態の初期値を 0 から 2 に変更します。変更が画面の States セクションに表示されます。

opspec2.States(1).x = 2
 Operating point specification for the Model watertank.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
	 spec:  dx = 0,  initial guess: 2
(2.) watertank/Water-Tank System/H
	 spec:  dx = 0,  initial guess: 1

Inputs: None 
----------

Outputs: None 
----------

opspec1 の表示を検証し、opspec1 の対応するプロパティ値も 0 から 2 に変更されることを確認します。

opspec1
 Operating point specification for the Model watertank.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
	 spec:  dx = 0,  initial guess: 2
(2.) watertank/Water-Tank System/H
	 spec:  dx = 0,  initial guess: 1

Inputs: None 
----------

Outputs: None 
----------

操作点の仕様の独立したコピーを作成するには、copyコマンドを使用します。

opspec3 = copy(opspec1);

ここで、opspec3 のプロパティを変更しても、opspec1 は変更されません。たとえば、最初の状態の初期値を 2 から 4 に変更します。

opspec3.States(1).x = 4
 Operating point specification for the Model watertank.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
	 spec:  dx = 0,  initial guess: 4
(2.) watertank/Water-Tank System/H
	 spec:  dx = 0,  initial guess: 1

Inputs: None 
----------

Outputs: None 
----------

opspec1 では、対応する値は 2 のままです。

opspec1.States(1).x
ans = 2

このコピー動作が発生するのは、operspec が "ハンドル オブジェクト" であるためです。ハンドル オブジェクトの詳細については、ハンドル オブジェクトの動作を参照してください。

Simulink モデルを開きます。

sys = 'watertank';
open_system(sys)

操作点の仕様オブジェクトの 2 行 3 列の配列を作成します。このような配列を使用すると、複数の操作点でモデルをバッチ平衡化することができます。

opspec = operspec(sys,[2,3]);

opspec の各要素には、モデルの既定の操作点の仕様オブジェクトが含まれます。

ドット表記を使用して操作点の仕様オブジェクトを変更します。たとえば、1 行目の 3 列目にある仕様オブジェクトの 2 番目の状態を構成します。

opspec(1,3).States(2).SteadyState = 1;
opspec(1,3).States(1).x = 2;

操作点の仕様オブジェクトの多次元配列を作成することもできます。たとえば、3 x 4 x 5 の配列を作成します。

opspec = operspec(sys,[3,4,5]);

入力引数

すべて折りたたむ

Simulink モデル名。文字ベクトルまたは string として指定します。

配列の次元。次のいずれかとして指定します。

  • 整数 — dim の操作点の仕様オブジェクトの列ベクトルを作成します。

  • 整数の行ベクトル — dim で指定された次元をもつ、操作点の仕様オブジェクトの配列を作成します。

    たとえば、4 行 5 列の操作点の仕様オブジェクトの配列を作成するには、次を使用します。

    opspec = operspec(mdl,[4,5]);

    操作点の仕様オブジェクトの多次元配列を作成するには、追加の次元を指定します。たとえば、2 x 3 x 4 の配列を作成するには次を使用します。

    opspec = operspec(mdl,[2,3,4]);

出力引数

すべて折りたたむ

操作点の仕様。操作点の仕様オブジェクト、またはその配列として返されます。

ドット表記を使用して操作点の仕様を変更できます。たとえば、opspec が単一の操作点の仕様オブジェクトの場合、opspec.States(1).x は最初のモデル状態の状態値にアクセスします。opspec が操作点の仕様オブジェクトの配列である場合、opspec(2,3).Inputs(1).u2 行目の 3 列目にある仕様で、最初の Inport ブロックの入力レベルにアクセスします。

各仕様オブジェクトには次のプロパティがあります。

プロパティ説明
ModelSimulink モデル名。文字ベクトルとして返されます。
States

状態の操作点仕様。状態仕様オブジェクトのベクトルとして返されます。States の各エントリは、1 つの Simulink ブロックのサポートされる状態を表します。

操作点オブジェクトでサポートされる状態のリストについては、操作点オブジェクトに含まれる Simulink モデルの状態を参照してください。このオブジェクトのプロパティを、ドット表記または関数 set を使用して編集します。

メモ

ブロックに名前付きの連続状態が複数ある場合、States には名前付きの各状態の構造体が 1 つ含まれます。

各状態仕様オブジェクトには次のフィールドがあります。

フィールド説明
Nx (読み取り専用)

ブロック内の状態の数

Block

ブロック パス。文字ベクトルとして返されます。

StateName

状態名

x

サポートされるすべてのブロック状態の値。長さ Nx のベクトルとして指定します。

StatesKnown フィールドで対応するフラグが 1 の場合、x は既知の状態値を含みます。それ以外の場合、x は状態値の初期推定値を含みます。

Ts

(離散時間状態のみ) サポートされる各ブロック状態のサンプル時間とオフセット。ベクトルとして返されます。

SampleType

状態の時間速度。次のいずれかとして返されます。

  • 'CSTATE' — 連続時間状態

  • 'DSTATE' ― 離散時間状態

inReferencedModel

ブロックが参照モデル内にあるかどうかを示すフラグ。次のいずれかとして返されます。

  • 1 — ブロックが参照モデル内にあります。

  • 0 — ブロックが現在のモデル ファイルにあります。

Known

平衡化中に状態値が既知であるかどうかを示すフラグ。長さ Nx の logical ベクトルとして指定します。

  • 1 — 操作点探索時に固定される既知の値

  • 0 (既定) — 最適化により検出される未知の値

操作点探索中に状態を固定するには、対応する Known フラグを 1 に設定し、Statesx プロパティを使用してその状態の値を指定します。

SteadyState

平衡化中に出力値が定常状態にあるかどうかを示すフラグ。長さ Nx の logical ベクトルとして指定します。

  • 1 (既定) — 平衡状態

  • 0 — 非平衡状態

Min

状態値の下限。長さ Nx のベクトルとして指定します。既定では、各状態の下限は -Inf です。

Max

状態値の上限。長さ Nx のベクトルとして指定します。既定では、各状態の上限は Inf です。

dxMin

定常状態ではない状態微分の下限。長さ Nx のベクトルとして指定します。既定では、各状態微分の下限は -Inf です。微分の範囲を指定する場合、SteadyState0 に設定しなければなりません。

dxMax

定常状態ではない状態微分の上限。長さ Nx のベクトルとして指定します。既定では、各状態微分の上限は Inf です。微分の範囲を指定する場合、SteadyState0 に設定しなければなりません。

Description

文字ベクトルとして指定されるブロック状態の説明。

Inputs

操作点での入力レベルの仕様。入力仕様オブジェクトのベクトルとして返されます。Inputs の各エントリは、モデル内にある 1 つのルートレベル Inport ブロックの入力レベルを表します。

各入力仕様オブジェクトには次のフィールドがあります。

フィールド説明
Block

Inport ブロック名

PortWidth

Inport ブロック信号の数

PortDimensions

Inport で受け入れる信号の次元

u

操作点の Inport ブロックの入力レベル。長さ PortWidth のベクトルとして返されます。

InputsKnown フィールドで対応するフラグが 1 の場合、u は既知の入力値を含みます。それ以外の場合、u は入力値の初期推定値を含みます。

Known

平衡化中に入力レベルが既知であるかどうかを示すフラグ。長さ PortWidth の logical ベクトルとして指定します。

  • 1 — 操作点探索時に固定される既知の入力レベル

  • 0 (既定) — 最適化により検出される未知の入力レベル

操作点探索時に入力レベルを固定するには、対応する Known フラグを 1 に設定し、Inputsu プロパティを使用して入力値を指定します。

Min

入力レベルの下限。長さ PortWidth のベクトルとして指定します。既定では、各入力の下限は -Inf です。

Max

入力レベルの上限。長さ PortWidth のベクトルとして指定します。既定では、各入力の上限は Inf です。

Description

文字ベクトルとして指定された Inport ブロックの入力の説明。

Outputs

操作点での出力レベルの仕様。出力仕様オブジェクトのベクトルとして返されます。Outputs の各エントリは、モデルの 1 つのルートレベル Outport ブロックか、モデル内にある 1 つの平衡化出力制約の出力レベルを表します。

addoutputspec を使用して、平衡化出力に追加の制約を指定できます。

各出力仕様オブジェクトには次のフィールドがあります。

フィールド説明
Block

Outport ブロック名

PortWidth

Outport ブロック信号の数

PortNumber

モデルでのこの Outport の番号

y

操作点の Outport ブロックの出力レベル。長さ PortWidth のベクトルとして指定します。

OutputsKnown フィールドで対応するフラグが 1 の場合、y は既知の出力値を含みます。それ以外の場合、y は出力値の初期推定値を含みます。

Known

平衡化中に出力レベルが既知であるかどうかを示すフラグ。長さ PortWidth の logical ベクトルとして指定します。

  • 1 — 操作点探索時に固定される既知の出力レベル

  • 0 (既定) — 最適化により検出される未知の出力レベル

操作点探索中に出力レベルを固定するには、対応する Known フラグを 1 に設定し、Outputsy プロパティを使用して出力値を指定します。

Min

出力レベルの下限。長さ PortWidth のベクトルとして指定します。既定では、各出力の下限は -Inf です。

Max

出力レベルの上限。長さ PortWidth のベクトルとして指定します。既定では、各出力の上限は Inf です。

Description

Outport ブロックの入力の説明。文字ベクトルとして指定します。

Time

モデル内の時変関数が評価される時間。ベクトルとして返されます。

CustomObjFcn

平衡化のための追加のカスタム目的関数を提供する関数。カスタム関数のハンドルか、関数名を含む文字ベクトルまたは string として指定します。カスタム関数は MATLAB® パス上にあるか、現在の作業フォルダー内になければなりません。

カスタムの目的関数はモデルの状態、入力、および出力の代数的な組み合わせとして指定できます。詳細については、カスタムの制約と目的関数を使用した操作点の計算を参照してください。

CustomConstrFcn

平衡化のための追加のカスタム制約を提供する関数。カスタム関数のハンドルか、関数名を含む文字ベクトルまたは string として指定します。カスタム関数は MATLAB パス上にあるか、現在の作業フォルダー内になければなりません。

カスタムの等式制約と不等式制約は、モデルの状態、入力、および出力の代数的組み合わせとして指定できます。詳細については、カスタムの制約と目的関数を使用した操作点の計算を参照してください。

CustomMappingFcn

モデルの状態、入力、および出力を、CustomConstrFcn および CustomObjFcn で受け入れられるベクトルにマッピングする関数。カスタム関数のハンドルか、関数名を含む文字ベクトルまたは string として指定します。カスタム関数は MATLAB パス上にあるか、現在の作業フォルダー内になければなりません。

複雑なモデルの場合、カスタムのマッピング関数を使用して、モデルの入力、出力、および状態のサブセットをカスタムの制約および目的関数に渡すことができます。カスタムのマッピングを指定した場合、カスタム制約関数とカスタム目的関数の両方にそのマッピングを使用しなければなりません。詳細については、カスタムの制約と目的関数を使用した操作点の計算を参照してください。

ヒント

  • 操作点の仕様オブジェクトのプロパティを表示するには、get を使用します。

  • 新しい operspec 変数は次の 3 つの方法で作成することができます。

    • operspec コマンドを使用して新しいオブジェクトを作成する。

    • 等号 (=) 演算子を使用した割り当てによって、新しい変数を作成する。

    • copy コマンドを使用して operspec オブジェクトをコピーする。

    operspec または copy を使用すると、新しい独立したオブジェクトが作成されます。割り当てを使用する場合、古い変数と新しい変数の間にリンクが存在します。例については、操作点の仕様のコピーを参照してください。

R2006a より前に導入