Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

パラメーターを変化させる、より効率的なバッチ線形化

この例では、モデル パラメーターのセットが変化する際にモデルのバッチ線形化を高速化する方法を説明します。

このようなモデルの線形化の時間を短縮するために、変化するパラメーター値を関数 linearize に渡すことができます。linearize は、変化したパラメーターが調整可能なパラメーターである場合、モデルの再コンパイルを行いません。全体的な線形化時間が最も改善するのは、モデルの更新時間が長いモデルの場合です。

プラント モデル

この例では、軽量飛行機のモデルを線形化します。このモデルの詳細については、Lightweight Airplane Design (Aerospace Blockset)を参照してください。このモデルを使用するには Aerospace Blockset™ ソフトウェアが必要です。

モデルを開きます。

mdl = 'scdskyhogg';
open_system(mdl)

モデルから線形化の入力と出力を抽出します。

io = getlinio(mdl);

モデルの初期操作点を抽出します。

op = operpoint(mdl);

linearize を複数回呼び出してモデルを線形化

この例では、自動操縦システムの高度コントローラーとピッチ コントローラーのゲインを +/- 10% ずつ変化させます。

自動操縦サブシステムを開きます。

open_system('scdskyhogg/Vehicle System Model/Avionics/Autopilot')

MATLAB® ワークスペース変数 k1 および k2 を使用して、変化させるコントローラーのゲインを初期化します。

blks = {'scdskyhogg/Vehicle System Model/Avionics/Autopilot/Alt Controller';...
        'scdskyhogg/Vehicle System Model/Avionics/Autopilot/Theta Controller'};
set_param(blks{1},'Gain','0.0337283240400683*k1')
set_param(blks{2},'Gain','-261.8699347622*k2')

k1 および k2 の変化する値を指定します。

ct = 1:20;
k1val = 1+(ct-10)/100;
k2val = 1+(ct-10)/100;

関数 linearize を 20 回呼び出して、指定した k1 および k2 の値でモデルを線形化します。

t = cputime;
for i=1:20
    k1 = k1val(i);
    k2 = k2val(i);
    sys_forloop(:,:,i) = linearize(mdl,op,io);
end

20 回の線形化の計算に要する合計時間 (秒数) を表示します。

dt_for = cputime - t
dt_for =

   76.1700

この時間に影響を与えるファクターは、ブロックのマスクをコンパイルして評価し、ワークスペース パラメーターを解決するのに要する合計時間です。モデルのコンパイルにおけるボトルネックを特定するには MATLAB プロファイラーを使用します。

linearize にパラメーター値を渡してモデルを線形化

パラメーター値の組み合わせごとに linearize を個別に呼び出す代わりに、単一の関数呼び出しでパラメーター値を linearize に渡すことができます。

MATLAB ワークスペース変数の名前と値の配列を指定して、パラメーター値を構造体で定義します。

params(1).Name = 'k1';
params(1).Value = k1val;
params(2).Name = 'k2';
params(2).Value = k2val;

モデルを線形化します。

t = cputime;
sys_params = linearize(mdl,op,io,params);

関数 linearize の単一の呼び出しで 20 回の線形化の計算に要する合計時間を表示します。この場合、ソフトウェアでモデルがコンパイルされるのは、指定したパラメーターを変化させるときの 1 回だけになります。

dt_params = cputime - t
dt_params =

   17.3100

結果の比較

この例では、変化するパラメーターは Simulink モデルの操作点には影響しません。両方の方法を使用した線形化は等価です。

bode(sys_forloop(:,:,1),sys_params(:,:,1))
legend('Linearization in FOR loop','Linearization using parameter structure')

結果の時間改善比を計算します。

ratio = dt_for/dt_params
ratio =

    4.4003

モデルを閉じます。

bdclose(mdl)

参考

| |

関連するトピック