findop
仕様 (平衡化) またはシミュレーションからの定常状態の操作点を見つける
構文
説明
例
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 search completed successfully using optimization.
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 search completed successfully using optimization.
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;
モデルをシミュレートして、時間単位 0、5、10 で操作点を抽出します。
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 を単一の操作点の仕様オブジェクトとして指定していて、param のパラメーター値で生成された状態が opspec の既知の状態と競合する場合、findop は opspec の仕様を使用してモデルを平衡化します。パラメーター値から派生した状態値でモデルを平衡化するには、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 の操作点の配列になります。
各操作点オブジェクトには次のプロパティがあります。
| プロパティ | 説明 | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model | Simulink モデル名。文字ベクトルとして返されます。 | ||||||||||||||||||
States | 状態の操作点。状態オブジェクトのベクトルとして返されます。 操作点オブジェクトでサポートされる状態のリストについては、操作点オブジェクトに含まれる Simulink モデルの状態を参照してください。 メモ ブロックに名前付きの連続状態が複数ある場合、 各状態オブジェクトには次のフィールドがあります。
| ||||||||||||||||||
Inputs | 操作点での入力レベル。入力オブジェクトのベクトルとして返されます。 各入力オブジェクトには次のフィールドがあります。
| ||||||||||||||||||
Time | モデル内の任意の時変関数が評価される時間。ベクトルとして返されます。 | ||||||||||||||||||
Version | オブジェクトのバージョン番号 |
op のプロパティを、ドット表記または関数 set を使用して編集できます。
操作点探索レポート。OperatingReport オブジェクトとして返されます。op が OperatingPoint オブジェクトの配列である場合、opreport は対応する OperatingReport オブジェクトの配列です。
このレポートは、セミコロンを使用して出力を非表示にした場合でも、自動的に表示されます。レポートを非表示にするには、options の DisplayReport フィールドを "off" に設定します。
各操作点探索レポートには次のプロパティがあります。
| プロパティ | 説明 | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model |
| ||||||||||||||||||
Inputs |
| ||||||||||||||||||
Outputs | 計算された操作点における出力値。このオブジェクトには、 | ||||||||||||||||||
States |
| ||||||||||||||||||
Time | op の Time プロパティの値 | ||||||||||||||||||
TerminationString | 最適化の終了条件。文字ベクトルとして返されます。 | ||||||||||||||||||
OptimizationOutput | 最適化アルゴリズムの検索結果。次のフィールドをもつ構造体として返されます。
最適化アルゴリズムの詳細については、Optimization Toolbox™ のドキュメンテーションを参照してください。 |
詳細
モデルの "定常状態の操作点" は、平衡または"平衡化" 条件とも呼ばれ、時間の経過によって変化しない状態変数を含みます。
モデルには、複数の定常状態の操作点が含まれる場合があります。たとえば、ぶら下がっている減衰振子には、時間が経過しても振子の位置が変わらない、2 つの定常状態の操作点があります。振子が真下にぶら下がっているとき、"安定した定常状態の操作点" が発生します。振子の位置が少し変化しても、振子は常に平衡状態に戻ります。したがって、操作点にわずかな変化があっても、システムは平衡値の周りの良好な近似の領域からは外れません。
振子が上方向を指した場合、"不安定な定常状態の操作点" が発生します。振子が "真上" を指している限り、平衡状態に保たれます。しかし、振子が真上の位置からわずかにずれた場合、振子は下方に揺れ、操作点は平衡値の近似値範囲になります。
最適化探索を使用して非線形システムの操作点を計算する場合、状態と入力レベルの初期推測値は、必ず収束するように最適な操作点の近くになければなりません。
複数の定常状態の操作点を含むモデルを線形化する場合、正確な操作点をもつことが重要です。たとえば、安定した定常状態の操作点を近似とした振子モデルを線形化すると、安定した線形モデルが生成され、不安定な定常状態の操作点を近似とした振子モデルを線形化すると、不安定な線形モデルが生成されます。
ヒント
initopspecを使用してシミュレーションのスナップショットの操作点探索、または以前に計算された操作点を初期化できます。操作点オブジェクトから状態値と入力値を抽出するには、それぞれ
getstatestructとgetinputstructを使用します。
アルゴリズム
既定の設定では、関数 findop はオプティマイザー graddescent-elim を使用します。別の最適化手法を使用するには、findopOptions を使用して options の OptimizerType の値を変更します。
関数 findop は以下の Simulink モデル プロパティを自動的に設定して最適化を行います。
BufferReuse = "off"BlockReductionOpt = 'off"SaveFormat = "StructureWithTime"
最適化の完了後、Simulink によって元のモデル プロパティが復元されます。
代替機能
アプリ
findop コマンドの代わりに、次のいずれかの方法で操作点を見つけることができます。
定常状態マネージャーを使用して操作点を計算する。例については、定常状態マネージャーを使用した仕様からの操作点の計算を参照してください。
線形化のために操作点を計算する場合、モデル線形化器を使用して操作点を検出し、モデルを線形化することができる。例については、モデル線形化器を使用した仕様からの操作点の計算を参照してください。
バージョン履歴
R2006a より前に導入PWM 信号によって駆動されるパワー エレクトロニクス回路など、周期的に駆動される、または自己発振するスイッチング システムの定常状態の操作点を見つけることができるようになりました。この機能は、初期の過渡状態から定常状態条件までシミュレートせずに、該当するシステムの定常状態の操作点を見つける場合に役立ちます。
周期的な操作点を見つけるには、次のようにします。
operspec関数を使用して、操作点の仕様オブジェクトを作成します。監視するモデル内の周期信号を選択します。モデル内で監視できる周期信号は 1 つのみです。信号がルートレベルの出力端子でない場合は、
addoutputspec関数を使用してその出力仕様を追加します。信号の既知の周期を指定します。
周期信号値の収束許容誤差を指定します。
findop関数を使用して操作点を計算します。
この手法では通常、定常状態の操作点により速く収束し、周期信号が指定された許容誤差内で定常状態にあることを自動的に確認できます。
詳細については、次の例を参照してください。
操作点および操作点探索レポートの入力と出力の PortWidth プロパティは将来のリリースで削除される予定です。代わりに、新しい Nu プロパティと Ny プロパティを使用してください。
コードを更新するには、次の表に示すように、PortWidth のインスタンスを Nu または Ny に変更します。
| 非推奨 | 推奨 |
|---|---|
[op,report] = findop("scdplane",10);
numOut = op.Outputs(1).PortWidth;
numIn = report.Inputs(1).PortWidth; | [op,report] = findop("scdplane",10);
numOut = op.Outputs(1).Ny;
numIn = report.Inputs(1).Nu; |
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)