このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 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 モデルのバッチ平衡化
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;
モデルをシミュレートして、時間単位 0
、5
、10
で操作点を抽出します。
op = findop(mdl,[0 5 10],params);
findop
はパラメーター値の各組み合わせでモデルをシミュレートして、指定されたシミュレーション時間における操作点を抽出します。
op
は 3×5×4 の操作点オブジェクトの配列です。
size(op)
ans = 3 5 4
入力引数
mdl
— Simulink モデル名
文字ベクトル | string
Simulink モデル名。文字ベクトルまたは string として指定します。モデルは現在の作業フォルダー内または MATLAB® パス上になければなりません。
opspec
— 操作点の仕様
OperatingSpec
オブジェクト | OperatingSpec
オブジェクトの配列
モデルを平衡化するための操作点の仕様。関数 operspec
を使用して作成された OperatingSpec
オブジェクトまたは OperatingSpec
オブジェクトの配列として指定します。
opspec
が配列の場合、findop
は 1 回のモデル コンパイルで対応する操作点の配列を返します。
param
— パラメーター サンプル
構造体 | 構造体配列
平衡化のためのパラメーター サンプル。次のいずれかとして指定します。
構造体 — 次のフィールドをもつ構造体としてパラメーターを指定して、単一パラメーターの値を変化させます。
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
の既知の状態と競合する場合、findop
は opspec
の仕様を使用してモデルを平衡化します。パラメーター値から派生した状態値でモデルを平衡化するには、opspec
を対応する operspec
オブジェクトの配列として指定します。例については、パラメーターの変化に対する Simulink モデルのバッチ平衡化を参照してください。
options
— 平衡化のオプション
findopOptions
オプション セット
平衡化のオプション。findopOptions
オプション セットとして指定します。
tsnapshot
— シミュレーションのスナップショット時間
スカラー | ベクトル
モデルの操作点を抽出するシミュレーションのスナップショット時間。単一のスナップショットの場合はスカラー、複数のスナップショットの場合はベクトルとして指定します。findop
はモデルをシミュレートし、各スナップショット時間でモデルの状態の操作点を計算します。
出力引数
op
— 操作点
OperatingPoint
オブジェクト | OperatingPoint
オブジェクトの配列
操作点。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
を使用して編集できます。
opreport
— 操作点探索レポート
OperatingReport
オブジェクト | OperatingReport
オブジェクトの配列
操作点探索レポート。OperatingReport
オブジェクトとして返されます。op
が OperatingPoint
オブジェクトの配列である場合、opreport
は対応する OperatingReport
オブジェクトの配列です。
このレポートは、セミコロンを使用して出力を非表示にした場合でも、自動的に表示されます。レポートを非表示にするには、options
の DisplayReport
フィールドを 'off'
に設定します。
各操作点探索レポートには次のプロパティがあります。
プロパティ | 説明 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model |
| ||||||||||||||||||
Inputs |
| ||||||||||||||||||
Outputs | 計算された操作点における出力値。このオブジェクトには、 | ||||||||||||||||||
States |
| ||||||||||||||||||
Time | op の Time プロパティの値 | ||||||||||||||||||
TerminationString | 最適化の終了条件。文字ベクトルとして返されます。 | ||||||||||||||||||
OptimizationOutput | 最適化アルゴリズムの検索結果。次のフィールドをもつ構造体として返されます。
最適化アルゴリズムの詳細については、Optimization Toolbox™ のドキュメンテーションを参照してください。 |
詳細
定常状態の操作点 (平衡化条件)
モデルの "定常状態の操作点" は、平衡または"平衡化" 条件とも呼ばれ、時間の経過によって変化しない状態変数を含みます。
モデルには、複数の定常状態の操作点が含まれる場合があります。たとえば、ぶら下がっている減衰振子には、時間が経過しても振子の位置が変わらない、2 つの定常状態の操作点があります。振子が真下にぶら下がっているとき、"安定した定常状態の操作点" が発生します。振子の位置が少し変化しても、振子は常に平衡状態に戻ります。したがって、操作点にわずかな変化があっても、システムは平衡値の周りの良好な近似の領域からは外れません。
振子が上方向を指した場合、"不安定な定常状態の操作点" が発生します。振子が "真上" を指している限り、平衡状態に保たれます。しかし、振子が真上の位置からわずかにずれた場合、振子は下方に揺れ、操作点は平衡値の近似値範囲になります。
最適化探索を使用して非線形システムの操作点を計算する場合、状態と入力レベルの初期推測値は、必ず収束するように最適な操作点の近くになければなりません。
複数の定常状態の操作点を含むモデルを線形化する場合、正確な操作点をもつことが重要です。たとえば、安定した定常状態の操作点を近似とした振子モデルを線形化すると、安定した線形モデルが生成され、不安定な定常状態の操作点を近似とした振子モデルを線形化すると、不安定な線形モデルが生成されます。
ヒント
initopspec
を使用してシミュレーションのスナップショットの操作点探索、または以前に計算された操作点を初期化できます。
アルゴリズム
既定の設定では、関数 findop
はオプティマイザー graddescent-elim
を使用します。別の最適化手法を使用するには、findopOptions
を使用して options
の OptimizerType
の値を変更します。
関数 findop
は以下の Simulink モデル プロパティを自動的に設定して最適化を行います。
BufferReuse = 'off'
RTWInlineParameters = 'on'
BlockReductionOpt = 'off'
SaveFormat = 'StructureWithTime'
最適化の完了後、Simulink によって元のモデル プロパティが復元されます。
代替機能
アプリ
findop
コマンドの代わりに、次のいずれかの方法で操作点を見つけることができます。
定常状態マネージャーを使用して操作点を計算する。例については、定常状態マネージャーを使用した仕様からの操作点の計算を参照してください。
線形化のために操作点を計算する場合、モデル線形化器を使用して操作点を検出し、モデルを線形化することができる。例については、モデル線形化器を使用した仕様からの操作点の計算を参照してください。
バージョン履歴
R2006a より前に導入R2021b: 操作点の入力と出力の PortWidth
プロパティは削除予定
操作点および操作点探索レポートの入力と出力の 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 コマンド
次の 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)