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

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

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

線形化の時間を短縮するには、変化するパラメーター値を関数 linearize に渡します。linearize は、変化したパラメーターが調整可能なパラメーターである場合、モデルの再コンパイルを行いません。全体的な線形化時間が最も改善するのは、モデルの更新時間が長いモデルの場合です。この例を実行するには、Aerospace Blockset™ ソフトウェアが必要です。

プラント モデル

この例では、軽量飛行機のモデルを線形化します。このモデルの詳細については、Lightweight Airplane Design (Aerospace Blockset)を参照してください。

モデルを開きます。

mdl = 'scdskyhogg';
open_system(mdl)
io = getlinio(mdl);
op = operpoint(mdl);

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

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

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

open_system('scdskyhogg/Vehicle System Model/Avionics/Autopilot')
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')

k1k2 の値を変化させ、モデルを 20 回線形化します。

t = cputime;
for ct = 20:-1:1
    k1 = 1+(ct-10)/100;
    k2 = 1+(ct-10)/100;
    sys_forloop(:,:,ct) = linearize(mdl,op,io);
end

合計時間を表示して、20 回の線形化を秒数で計算します。

dt_for = cputime - t
dt_for =

  100.5700

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

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

linearize にパラメーター値を渡すには、構造体を使用してパラメーターの名前と値を指定します。

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

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);

合計時間を表示して、1 回の linearize コマンドの呼び出しで、20 回の線形化を計算します。ここでは、指定したパラメーターを変化させる際にモデルが 1 回だけコンパイルされます。

dt_params = cputime - t
dt_params =

   20.4800

結果の比較

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

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

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

ratio = dt_for/dt_params
ratio =

    4.9106

モデルを閉じます。

bdclose(mdl)