メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

trim

動的システムの平衡点の検出

trim 関数では基本的な平衡化機能のみが提供されています。完全な平衡化機能については、Simulink® Control Design™ ソフトウェアを使用してください。詳細については、定常状態の操作点の計算 (Simulink Control Design)を参照してください。

説明

trim 関数は初期点から始めて、逐次二次計画法アルゴリズムを使って直近の平衡点が見つかるまで検索を行います。暗黙的または明示的に初期点を指定しなければなりません。trim 関数は平衡点を見つけることができない場合、検索で検出した点を返します。この場合、状態導関数は最小最大の観点からゼロに最も近くなります。つまり、この関数は、導関数のゼロからの最大偏差が最小になる点を返します。trim 関数は、特定の入力、出力、または状態の条件に一致する平衡点を見つけることができます。また、システムが指定された様式で変化している点 (システムの状態導関数が特定の非ゼロの値である点) を見つけることができます。

注意

trim 関数を使用して指定の初期操作点に近い平衡点を見つける場合、trim 関数から返されるのはローカルな値だけです。より適切な平衡点が他に存在する可能性があります。特定の用途に最も適した平衡点を見つけるには、状態、入力、および出力の初期値について複数の初期推定値を試すことをお勧めします。

[x,u,y,dx] = trim(sys) は、sys で指定されたモデルの初期状態 x0 に最も近い平衡点を見つけます。具体的には、trim 関数は [x-x0,u,y] の最大絶対値が最小になる平衡点を見つけます。システムの初期状態に近い平衡点を見つけることができない場合、trim はシステムが最も平衡に近い点を返します。具体的には、abs(dx) が最小になる点を返します。ここで、dx はシステムの導関数を表します。コマンド [sizes,x0,xstr] = sys([],[],[],0) を使って x0 を取得できます。

[x,u,y,dx] = trim(sys,x0,u0,y0) は、abs([x-x0; u-u0; y-y0]) の最大値が最小になる x0u0y0 に最も近い平衡点を見つけます。

[x,u,y,dx] = trim(sys,x0,u0,y0,ix,iu,iy) は、指定された一連の状態、入力、出力の条件を満たす x0u0y0 に最も近い平衡点を見つけます。整数ベクトル ixiuiy で、満たさなければならない x0u0y0 の値を選択します。trim 関数は、指定された条件のセットを正確に満たす平衡点を見つけることができない場合、その条件、つまり abs([x(ix)-x0(ix); u(iu)-u0(iu); y(iy)-y0(iy)]) を満たす最も近い点を返します。

[x,u,y,dx] = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx) は、特定の非平衡点 (システムの状態導関数が指定された非ゼロの値をもつ点) を見つけます。ここで、検索の開始点における状態導関数の値を dx0 で指定し、検索において正確に満たさなければならない dx0 の値を idx で選択します。

[x,u,y,dx,options] = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx,options) は、trim 関数が平衡点を見つけるために使う最適化関数に渡す最適化パラメーターの配列を指定します。次にこの配列を最適化関数が使用して最適化プロセスを制御し、プロセスに関する情報を返します。trim 関数は、検索プロセスの最後に options 配列を返します。この方法で基になる最適化プロセスを公開することで、trim 関数は平衡点の検索の監視と微調整を可能にします。

[x,u,y,dx,options] = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx,options,t) は、システムが時間依存の場合に時間を t に設定します。

状態、入力、または出力の値のいずれかを固定すると、trim 関数は指定の制約を満たす解を未指定の自由変数を使用して導出します。

すべて折りたたむ

State-Space ブロックを使用して線形状態空間システムをモデル化する EquilibriumPoints という名前のモデル例を開きます。

sys = "EquilibriumPoints";
open_system(sys)

Block diagram of example model

State-Space ブロックで以下の行列が指定されています。

  • A = [-0.09 -0.01;1 0]

  • B = [0 -7;0 -2]

  • C = [0 2;1 -5]

  • D = [-3 0; 1 0]

モデルにおける平衡点を見つけるには、trim 関数を呼び出し、モデル名のみを入力引数として指定します。

[x,u,y,dx,options] = trim(sys)
x = 2×1

     0
     0

u = 2×1

     0
     0

y = 2×1

     0
     0

dx = 2×1

     0
     0

options = 1×18

         0    0.0001    0.0001    0.0000         0         0    1.0000         0         0    7.0000    2.0000         0    2.0000  500.0000         0    0.0000    0.1000    1.0000

Simulink® の trim 関数は、モデルを使用して、指定された入力、出力、および状態の条件を満たす動的システムの定常状態点を特定します。

SteadyStatePoints という名前のモデル例を開きます。

sys = "SteadyStatePoints";
open_system(sys)

Block diagram of example model

両方の出力値について値が 1 になる入力と状態の値を見つけるには、trim 関数を使用します。

x と u という名前の変数を作成し、状態変数値と入力値の初期推定を表す値をそれぞれ格納します。次に、y という名前の変数を作成して目的の出力値を格納します。

x = [0; 0; 0];
u = 0;
y = [1; 1];

インデックス変数を作成して、どの変数が固定で、どの変数が可変であるかを指定します。状態値と入力値が可変であることを指定するために、インデックス変数 ixiu に空行列 ([]) を割り当てます。出力値が固定であることを指定するために、インデックス変数 iy の値を [1;2] と指定します。

ix = [];      % Don't fix any of the states
iu = [];      % Don't fix the input
iy = [1;2];   % Fix both output 1 and output 2

目的の出力値になる状態と入力の値を見つけるには、trim 関数を呼び出します。trim 関数から返される値は、丸め誤差によって異なることがあります。

[x,u,y,dx] = trim(sys,x,u,y,ix,iu,iy)
x = 3×1

   -0.0000
    1.0000
    1.0000

u = 
2
y = 2×1

    1.0000
    1.0000

dx = 3×1
10-15 ×

    0.1110
   -0.0000
   -0.1110

平衡点の問題の解はない場合もあります。その場合、trim 関数はまず導関数を 0 に設定しようとし、その後に望ましい結果との最大偏差が最小になる解を返します。

State-Space ブロックを使用して線形状態空間システムをモデル化する EquilibriumPoints という名前のモデル例を開きます。

sys = "EquilibriumPoints";
open_system(sys)

Block diagram of example model

State-Space ブロックで以下の行列が指定されています。

  • A = [-0.09 -0.01;1 0]

  • B = [0 -7;0 -2]

  • C = [0 2;1 -5]

  • D = [-3 0; 1 0]

状態値と入力値で定義される操作点に近い平衡点を見つけるには、trim 関数を呼び出し、状態値と入力値を含む追加の入力引数を指定して操作点を定義します。

x0 = [1;1];
u0 = [1;1];
[x,u,y,dx,options] = trim(sys,x0,u0)
x = 2×1
10-13 ×

   -0.5751
   -0.5744

u = 2×1

    0.3333
   -0.0000

y = 2×1

   -1.0000
    0.3333

dx = 2×1
10-12 ×

    0.2195
    0.0036

options = 1×18

         0    0.0001    0.0001    0.0000         0         0    1.0000    1.0000         0   25.0000    5.0000         0    2.0000  500.0000         0    0.0000    0.1000    1.0000

options の戻り引数をチェックして、指定の操作点に近い平衡点を識別するために必要な反復回数を確認します。

options(10)
ans = 
25

両方の出力値が固定された平衡点を見つけるには、ターゲットの出力値、および出力値が固定であることを示す追加の入力引数を指定します。

y = [1;1];
iy = [1;2];
[x,u,y,dx] = trim(sys,[],[],y,[],[],iy)
x = 2×1

    0.0009
   -0.3075

u = 2×1

   -0.5383
    0.0004

y = 2×1

    1.0000
    1.0000

dx = 2×1
10-16 ×

   -0.0260
    0.4348

指定した導関数の値をもち、両方の出力値が固定された平衡点を見つけるには、導関数の値、ターゲットの出力値、および出力値が固定であることを示す追加の入力引数を指定します。

y = [1;1];
iy = [1;2];
dx = [0;1];
idx = [1;2];
[x,u,y,dx,options] = trim(sys,[],[],y,[],[],iy,dx,idx)
x = 2×1

    0.9752
   -0.0827

u = 2×1

   -0.3884
   -0.0124

y = 2×1

    1.0000
    1.0000

dx = 2×1

     0
     1

options = 1×18

         0    0.0001    0.0001    0.0000         0         0    1.0000         0         0   13.0000    3.0000         0    2.0000  500.0000         0    0.0000    0.1000    1.0000

options の戻り引数をチェックして、指定の操作点に近い平衡点を識別するために必要な反復回数を確認します。

options(10)
ans = 
13

入力引数

すべて折りたたむ

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

データ型: char | string

状態変数値の初期推定。ベクトルとして指定します。

入力値の初期推定。スカラーまたはベクトルとして指定します。

目的の出力値。ベクトルとして指定します。

固定の状態を指定するインデックス変数。整数ベクトルとして指定します。

値が可変であることを指定するには、空行列 ([]) を指定します。

固定の入力を指定するインデックス変数。整数ベクトルとして指定します。

値が可変であることを指定するには、空行列 ([]) を指定します。

固定の出力を指定するインデックス変数。整数ベクトルとして指定します。

値が可変であることを指定するには、空行列 ([]) を指定します。

検索開始時の状態導関数の値。ベクトルとして指定します。

検索が厳密に満たす必要がある状態導関数の値。ベクトルとして指定します。

最適化パラメーター。配列として指定します。

配列要素1、2、3、4、10 は、平衡点の検索に特に役立ちます。

次の表で、平衡点の検索に各要素がどのように影響を及ぼすかを説明します。

番号既定の設定説明
10表示オプション。0 は表示なし、1 は表形式の出力、-1 は警告メッセージの抑制をそれぞれ指定します。
210–4検索された平衡点が検索を終了するために達成しなければならない精度。
310–4平衡検索ゴール関数が検索を終了するために達成しなければならない精度。
410–6状態導関数が検索を終了するために達成しなければならない精度。
5N/A使用しません。
6N/A使用しません。
7N/A内部で使用。
8N/A平衡検索ゴール関数の値 (ゴール達成では λ)。
9N/A使用しません。
10N/A平衡点の検索に使用する反復回数。
11N/A関数の勾配評価回数。
120使用しません。
130等式制約条件の数。
14100*(変数の数)平衡点を見つけるために使用する関数評価の最大回数。
15N/A使用しません。
1610–8内部で使用。
170.1内部で使用。
18N/Aステップ長。

時間依存のシステムの時間。スカラーとして指定します。

出力引数

すべて折りたたむ

平衡点。ベクトルとして返されます。

平衡点。ベクトルとして返されます。

平衡点。ベクトルとして返されます。

システムの導関数。ベクトルとして返されます。

最適化パラメーター。配列として返されます。

次の表で、平衡点の検索に各要素がどのように影響を及ぼすかを説明します。

番号既定の設定説明
10表示オプション。0 は表示なし、1 は表形式の出力、-1 は警告メッセージの抑制をそれぞれ指定します。
210–4検索された平衡点が検索を終了するために達成しなければならない精度。
310–4平衡検索ゴール関数が検索を終了するために達成しなければならない精度。
410–6状態導関数が検索を終了するために達成しなければならない精度。
5N/A使用しません。
6N/A使用しません。
7N/A内部で使用。
8N/A平衡検索ゴール関数の値 (ゴール達成では λ)。
9N/A使用しません。
10N/A平衡点の検索に使用する反復回数。
11N/A関数の勾配評価回数。
120使用しません。
130等式制約条件の数。
14100*(変数の数)平衡点を見つけるために使用する関数評価の最大回数。
15N/A使用しません。
1610–8内部で使用。
170.1内部で使用。
18N/Aステップ長。

詳細

すべて折りたたむ

アルゴリズム

trim 関数は逐次二次計画法アルゴリズムを使って平衡点を検出します。このアルゴリズムの詳細については、逐次二次計画法 (SQP) (Optimization Toolbox)を参照してください。

バージョン履歴

R2006a より前に導入

参考

(Simulink Control Design)

トピック