Main Content

findop

仕様 (平衡化) またはシミュレーションからの定常状態の操作点

説明

op = findop(mdl,opspec) は、opspec の仕様を満たすモデルの操作点を返します。通常の場合、モデルを定常状態の操作点で平衡化します。Simulink® モデルは開いていなければなりません。opspec が操作点の仕様の配列である場合、findop はそれに対応する操作点の配列を返します。

op = findop(mdl,opspec,param)param に指定されたパラメーター値の変化についてモデルのバッチ平衡化を行います。

op = findop(___,options) は追加の最適化アルゴリズム options を使用してモデルを平衡化します。

[op,opreport] = findop(___) は前述の任意の構文について操作点探索レポート opreport を返します。

op = findop(mdl,tsnapshot) は、モデルの初期条件を使用してモデルをシミュレートし、tsnapshot に指定されたシミュレーションのスナップショット時間で操作点を抽出します。

op = findop(mdl,tsnapshot,param) は、param で指定されたパラメーター値の変化を使用してモデルのバッチ シミュレーションを実行し、シミュレーションのスナップショット時間で操作点を抽出します。

すべて折りたたむ

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

モデルを平衡化して水タンク水位が 10 である定常状態の操作点を見つけます。

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

opspec = operspec(mdl);

最初のモデルの状態の仕様を設定します。最初の状態は下限が 0 の定常状態でなければなりません。状態値の初期推定として 2 を指定します。

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

2 番目のモデル状態を、値が 10 の既知の状態として構成します。

opspec.States(2).Known = 1;
opspec.States(2).x = 10;

これらの仕様を満たす操作点を検出します。

op = findop(mdl,opspec);
 Operating point search report:
---------------------------------

opreport = 


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

Operating point specifications were successfully met.
States: 
----------
 Min     x     Max   dxMin    dx   dxMax 
______ ______ ______ ______ ______ ______
                                         
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
  0    1.2649  Inf     0      0      0   
(2.) watertank/Water-Tank System/H
  10     10     10     0      0      0   

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

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

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

パラメーター A および b をそのノミナル値の 10% 以内で変化させ、3 行 4 列のパラメーター グリッドを作成します。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                         linspace(0.9*b,1.1*b,4));

パラメーターの構造体配列を作成し、各パラメーターに名前とグリッド点を指定します。

params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

モデルの既定の操作点の仕様を作成します。

opspec = operspec(mdl);

指定した操作点の仕様とパラメーター グリッドを使用してモデルを平衡化します。

opt = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,params,opt);

op は、指定されたパラメーター グリッド点に対応する操作点オブジェクトの 3 行 4 列の配列です。

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

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

opspec = operspec(mdl);

オプティマイザーのタイプを勾配降下に設定して探索レポートを非表示にするオプション セットを作成します。

opt = findopOptions('OptimizerType','graddescent','DisplayReport','off');

指定されたオプション セットを使用してモデルを平衡化します。

op = findop(mdl,opspec,opt);

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

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

opspec = operspec(mdl);

最初のモデルの状態の仕様を設定します。

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

2 番目のモデルの状態の仕様を設定します。

opspec.States(2).Known = 1;
opspec.States(2).x = 10;

これらの仕様を満たす操作点を探索し、操作点探索レポートを返します。探索レポートを非表示にするオプション セットを作成します。

opt = findopOptions('DisplayReport',false);
[op,opreport] = findop(mdl,opspec,opt);

opreport は、操作点探索の終了時に最適化アルゴリズムがどれほど的確に仕様を満たしたかを示します。

opreport
opreport = 


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

Operating point specifications were successfully met.
States: 
----------
 Min     x     Max   dxMin    dx   dxMax 
______ ______ ______ ______ ______ ______
                                         
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
  0    1.2649  Inf     0      0      0   
(2.) watertank/Water-Tank System/H
  10     10     10     0      0      0   

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

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

dx は、各状態の時間微分です。すべての dx 値がゼロなので、操作点は定常状態にあります。

Simulink モデルを開きます。

mdl = 'magball';
open_system(mdl)

モデルをシミュレートして、時間単位 10 および 20 で操作点を抽出します。

op = findop(mdl,[10,20]);

op は、スナップショット時間ごとに 1 つの要素をもつ操作点の列ベクトルです。

最初の操作点を表示します。

op(1)
ans = 


 Operating point for the Model magball.
 (Time-Varying Components Evaluated at time t=10)

States: 
----------
    x     
__________
          
(1.) magball/Controller/PID Controller/Filter/Cont. Filter/Filter
5.4732e-07
(2.) magball/Controller/PID Controller/Integrator/Continuous/Integrator
 14.0071  
(3.) magball/Magnetic Ball Plant/Current
  7.0036  
(4.) magball/Magnetic Ball Plant/dhdt
8.443e-08 
(5.) magball/Magnetic Ball Plant/height
   0.05   

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

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

パラメーター値を指定します。パラメーター グリッドは 5 行 4 列の配列です。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,5),...
                         linspace(0.9*b,1.1*b,4));
params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

モデルをシミュレートして、時間単位 0510 で操作点を抽出します。

op = findop(mdl,[0 5 10],params);

findop はパラメーター値の各組み合わせでモデルをシミュレートして、指定されたシミュレーション時間における操作点を抽出します。

op は 3×5×4 の操作点オブジェクトの配列です。

size(op)
ans =

     3     5     4

入力引数

すべて折りたたむ

Simulink モデル名。文字ベクトルまたは string として指定します。モデルは現在の作業フォルダー内または MATLAB® パス上になければなりません。

モデルを平衡化するための操作点の仕様。関数 operspec を使用して作成された OperatingSpec オブジェクトまたは OperatingSpec オブジェクトの配列として指定します。

opspec が配列の場合、findop は 1 回のモデル コンパイルで対応する操作点の配列を返します。

平衡化のためのパラメーター サンプル。次のいずれかとして指定します。

  • 構造体 — 次のフィールドをもつ構造体としてパラメーターを指定して、単一パラメーターの値を変化させます。

    • Name — パラメーター名。文字ベクトルまたは string として指定します。モデル ワークスペース、MATLAB ワークスペース、またはデータ ディクショナリ内の変数である任意のモデル パラメーターを指定できます。モデルによって使用される変数がスカラー値でない場合は、スカラー数値に関連付けられた表現としてパラメーター名を指定します。たとえば、ベクトル V の最初の要素をパラメーターとして使用します。

      parameters.Name = 'V(1)';
    • Value — パラメーター サンプル値。double の配列として指定します。

    たとえば、パラメーター A の値を 10% の範囲内で変化させます。

    parameters.Name = 'A';
    parameters.Value = linspace(0.9*A,1.1*A,3);
  • 構造体配列 — 複数のパラメーターの値を変化させます。たとえば、パラメーター A および b の値を 10% の範囲内で変化させます。

    [A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                             linspace(0.9*b,1.1*b,3));
    parameters(1).Name = 'A';
    parameters(1).Value = A_grid;
    parameters(2).Name = 'b';
    parameters(2).Value = b_grid;

パラメーター値の変化を指定すると、findop はパラメーター値の各組み合わせでモデルをバッチ平衡化し、対応する操作点の配列を返します。param で調整可能なパラメーターのみを指定する場合、ソフトウェアはコンパイルを 1 回のみ実行してモデルをバッチ平衡化します。

opspec を単一の operspec オブジェクトとして指定していて、param のパラメーター値で生成された状態が opspec の既知の状態と競合する場合、findopopspec の仕様を使用してモデルを平衡化します。パラメーター値から派生した状態値でモデルを平衡化するには、opspec を対応する operspec オブジェクトの配列として指定します。例については、パラメーターの変化に対する Simulink モデルのバッチ平衡化を参照してください。

平衡化のオプション。findopOptions オプション セットとして指定します。

モデルの操作点を抽出するシミュレーションのスナップショット時間。単一のスナップショットの場合はスカラー、複数のスナップショットの場合はベクトルとして指定します。findop はモデルをシミュレートし、各スナップショット時間でモデルの状態の操作点を計算します。

出力引数

すべて折りたたむ

操作点。OperatingPoint オブジェクトまたは OperatingPoint オブジェクトの配列として返されます。op の次元は、指定されたパラメーターの変化と、操作点の仕様またはシミュレーションのスナップショット時間によって決まります。

パラメーターの変化操作点探索の対象結果の op の次元
パラメーター変化なし単一の操作点の仕様 (opspec で指定)単一の操作点オブジェクト
tsnapshot で指定される単一のスナップショット時間
opspec で指定される N1×...×Nm の操作点仕様の配列N1×...×Nm
tsnapshot で指定される Ns 個のスナップショット長さ Ns の列ベクトル
param で指定される N1×...×Nm のパラメーター グリッド単一の操作点の仕様 (opspec で指定)N1×...×Nm
tsnapshot で指定される単一のスナップショット時間
opspec で指定される N1×...×Nm の操作点仕様の配列
tsnapshot で指定される Ns 個のスナップショットNs×N1×...×Nm

たとえば、以下を仮定します。

  • opspec は単一の操作点の仕様オブジェクトで、param が 3×4×2 のパラメーター グリッドを指定するとします。この場合、op は 3×4×2 の操作点の配列になります。

  • tsnapshot はスカラーで、param が 5 行 6 列のパラメーター グリッドを指定するとします。この場合、op は 1×5×6 の操作点の配列になります。

  • tsnapshot は 3 つの要素をもつ行ベクトルで、param が 5 行 6 列のパラメーター グリッドを指定するとします。この場合、op は 3×5×6 の操作点の配列になります。

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

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

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

操作点オブジェクトでサポートされる状態のリストについては、操作点オブジェクトに含まれる Simulink モデルの状態を参照してください。

メモ

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

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

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

ブロック内の状態の数

Block

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

StateName

状態名

x

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

Ts

サポートされる各ブロック状態のサンプル時間とオフセット。ベクトルとして返されます。連続時間システムの場合、Ts はゼロです。

SampleType

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

  • 'CSTATE' — 連続時間状態

  • 'DSTATE' ― 離散時間状態

inReferencedModel

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

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

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

Description

ブロックの状態の説明。文字ベクトルとして返されます。

Inputs

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

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

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

Inport ブロック信号の数

Block

Inport ブロック名

PortDimensions

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

u

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

Description

Inport ブロックの入力の説明。文字ベクトルとして返されます。

Time

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

Version

オブジェクトのバージョン番号

op のプロパティを、ドット表記または関数 set を使用して編集できます。

操作点探索レポート。OperatingReport オブジェクトとして返されます。opOperatingPoint オブジェクトの配列である場合、opreport は対応する OperatingReport オブジェクトの配列です。

このレポートは、セミコロンを使用して出力を非表示にした場合でも、自動的に表示されます。レポートを非表示にするには、optionsDisplayReport フィールドを 'off' に設定します。

各操作点探索レポートには次のプロパティがあります。

プロパティ説明
Model

opModel プロパティの値

Inputs

opInputs プロパティの値

Outputs

計算された操作点における出力値。このオブジェクトには、opspecOutputs プロパティと同じフィールドに加え、目的の出力値である yspec が含まれます。

States

opStates プロパティの値に、状態微分値を含む dx を加えたもの。離散時間状態の場合、dx は次の状態値と現在の状態値の差異、つまり x(k+1) – x(k) です。

TimeopTime プロパティの値
TerminationString最適化の終了条件。文字ベクトルとして返されます。
OptimizationOutput

最適化アルゴリズムの検索結果。次のフィールドをもつ構造体として返されます。

フィールド説明
iterations

最適化で実行された反復の回数

funcCount

最適化で実行された関数評価の回数

lssteplength

探索方向に対する直線探索ステップのサイズ (有効制約法最適化アルゴリズムのみ)

stepsize

最後の反復での状態ベクトルの変位 (有効制約法および内点法の最適化アルゴリズム)

algorithm

使用される最適化アルゴリズム

firstorderopt

trust-region-reflective 法最適化アルゴリズムの場合は 1 次の最適化の尺度、それ以外のアルゴリズムでは []

constrviolation

制約関数の最大値

message

終了メッセージ

最適化アルゴリズムの詳細については、Optimization Toolbox™ のドキュメンテーションを参照してください。

詳細

すべて折りたたむ

定常状態の操作点 (平衡化条件)

モデルの "定常状態の操作点" は、平衡または"平衡化" 条件とも呼ばれ、時間の経過によって変化しない状態変数を含みます。

モデルには、複数の定常状態の操作点が含まれる場合があります。たとえば、ぶら下がっている減衰振子には、時間が経過しても振子の位置が変わらない、2 つの定常状態の操作点があります。振子が真下にぶら下がっているとき、"安定した定常状態の操作点" が発生します。振子の位置が少し変化しても、振子は常に平衡状態に戻ります。したがって、操作点にわずかな変化があっても、システムは平衡値の周りの良好な近似の領域からは外れません。

振子が上方向を指した場合、"不安定な定常状態の操作点" が発生します。振子が "真上" を指している限り、平衡状態に保たれます。しかし、振子が真上の位置からわずかにずれた場合、振子は下方に揺れ、操作点は平衡値の近似値範囲になります。

最適化探索を使用して非線形システムの操作点を計算する場合、状態と入力レベルの初期推測値は、必ず収束するように最適な操作点の近くになければなりません。

複数の定常状態の操作点を含むモデルを線形化する場合、正確な操作点をもつことが重要です。たとえば、安定した定常状態の操作点を近似とした振子モデルを線形化すると、安定した線形モデルが生成され、不安定な定常状態の操作点を近似とした振子モデルを線形化すると、不安定な線形モデルが生成されます。

ヒント

  • initopspec を使用してシミュレーションのスナップショットの操作点探索、または以前に計算された操作点を初期化できます。

  • 関数 linearize を使用して操作点 op でモデルを線形化します。

アルゴリズム

既定の設定では、関数 findop はオプティマイザー graddescent-elim を使用します。別の最適化手法を使用するには、findopOptions を使用して optionsOptimizerType の値を変更します。

関数 findop は以下の Simulink モデル プロパティを自動的に設定して最適化を行います。

  • BufferReuse = 'off'

  • RTWInlineParameters = 'on'

  • BlockReductionOpt = 'off'

  • SaveFormat = 'StructureWithTime'

最適化の完了後、Simulink によって元のモデル プロパティが復元されます。

代替機能

アプリ

findop コマンドの代わりに、次のいずれかの方法で操作点を見つけることができます。

バージョン履歴

R2006a より前に導入

すべて展開する