ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

trim

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

構文

[x,u,y,dx] = trim('sys')
[x,u,y,dx] = trim('sys',x0,u0,y0)
[x,u,y,dx] = trim('sys',x0,u0,y0,ix,iu,iy)
[x,u,y,dx] = trim('sys',x0,u0,y0,ix,iu,iy,dx0,idx)
[x,u,y,dx,options] = trim('sys',x0,u0,y0,ix,iu,iy,dx0,idx,options)
[x,u,y,dx,options] = trim('sys',x0,u0,y0,ix,iu,iy,dx0,idx,options,t)

説明

平衡点とは動的システムのパラメーター空間内の点のことをいいます。システムはこの点で定常状態です。たとえば、航空機の平衡点は航空機がまっすぐ水平に飛行するよう制御する設定のことをいいます。数学的には、平衡点はシステムの状態の導関数がゼロである点のことをいいます。trim は初期点から始めて、二次計画法を使って直近の平衡点が見つかるまで検索を行います。暗黙的または明示的に初期点を指定しなければなりません。trim は平衡点を見つけることができない場合、検索で検出した点を返します。この場合、状態導関数は最小最大の観点からゼロに最も近くなります。つまり、導関数のゼロからの最大偏差を最小にする点を返します。trim は、特定の入力、出力または状態条件に一致する平衡点を見つけることができます。また、システムが指定された様式で変化している点 (システムの状態導関数が特定のゼロ以外の値である点) を見つけることができます。

[x,u,y,dx] = trim('sys') は、システムの初期状態 x0 に最も近い平衡点を見つけます。特に、trim[x-x0,u,y] の最大絶対値を最小にする平衡点を見つけます。システムの初期状態に近い平衡点を見つけることができない場合、trim はシステムが最も平衡に近い点を返します。特に、trim は abs(dx-0) を最小にする点を返します。次のコマンドを使って x0 を取得できます。

[sizes,x0,xstr] = sys([],[],[],0)

[x,u,y,dx] = trim('sys',x0,u0,y0) は、x0u0y0 に最も近い平衡点 (以下の最大値を最小にする点) を返します。

abs([x-x0; u-u0; y-y0])

[x,u,y,dx] = trim('sys',x0,u0,y0,ix,iu,iy) は指定された状態、入力、出力条件の設定を満たす x0u0y0 に最も近い平衡点を返します。整数ベクトル ixiu、および iy は、満たすべき 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 は検索の始点における状態導関数の値を指定し、idx は検索が確実に満たさなければならない dx0 の値を選択します。

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

次の表で、平衡点の検索に各要素がどのように影響を及ぼすかを説明します。配列要素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ステップ長を返します。

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

State-Space ブロックを使用してのモデルが作成された線形状態空間システムがあるとします。

x˙=Ax+Buy=Cx+Du

コマンド ラインまたはブロック パラメーター ダイアログで入力する ABC、および D の各行列は次のとおりです。

A = [-0.09 -0.01;  1   0];
B = [ 0    -7;     0  -2];
C = [ 0     2;     1  -5];
D = [-3     0;     1   0];

例 1

sys と呼ばれるこのモデルで平衡点を見つけるには、次の構文を使用します。

[x,u,y,dx,options] = trim('sys')
x =
   0
   0
u =
   0
   0
y =
   0
   0
dx =
   0
   0

取得される反復回数は次のとおりです。

options(10)
ans =
      7

例 2

x = [1;1], u = [1;1] に近い平衡点を検索するには、次のように入力します。

x0 = [1;1];
u0 = [1;1];
[x,u,y,dx,options] = trim('sys', x0, u0);
x =
    1.0e-13 *
   -0.5160
   -0.5169
u =
    0.3333
    0.0000
y =
   -1.0000
    0.3333
dx =
    1.0e-12 *
    0.1979
    0.0035

取得される反復回数は次のとおりです。

options(10)
ans = 
      25

例 3

出力を 1 に固定して平衡点を検索するには、次の構文を使用します。

y = [1;1];
iy = [1;2];
[x,u,y,dx] = trim('sys', [], [], y, [], [], iy)
x =
    0.0009
   -0.3075
u =
   -0.5383
    0.0004
y =
    1.0000
    1.0000
dx =
    1.0e-15 *
   -0.0170
    0.1483

例 4

出力を 1 に固定し、導関数を 0 と 1 に設定して平衡点を検索するには、次の構文を使用します。

y = [1;1];
iy = [1;2];
dx = [0;1];
idx = [1;2];
[x,u,y,dx,options] = trim('sys',[],[],y,[],[],iy,dx,idx)
x =
    0.9752
   -0.0827
u =
   -0.3884
   -0.0124
y =
    1.0000
    1.0000
dx =
    0.0000
    1.0000

取得される反復回数は次のとおりです。

options(10)
ans = 
      13

制限

指定された初期点から開始された関数 trim により見つかった平衡点は、ローカルな値だけです。より適切な平衡点が他に存在する可能性があります。つまり、特定の用途に最も適した平衡点を見つけたい場合は、複数の xuy の初期推測値を試すことが重要です。

詳細

すべて折りたたむ

アルゴリズム

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

この情報は役に立ちましたか?