メインコンテンツ

熱モデルのスパースの平衡化打ち切り

R2023b 以降

この例では、円柱ロッドの熱分布の熱モデルを線形化することで得られるスパース状態空間モデルの平衡化打ち切りの実行方法を示します。

モデル データを読み込みます。

load cylindricalRod.mat
sys = sparss(A,B,C,D,E);
size(sys)
Sparse state-space model with 3 outputs, 1 inputs, and 7522 states.

熱モデルには 7522 の状態が含まれています。

sys の平衡化打ち切り仕様オブジェクトを作成し、アルゴリズムを実行します。

R = reducespec(sys,"balanced");
R = process(R)
Initializing...
Running ADI with built-in shifts.........
Running ADI with adaptive shifts..
Solved Lyapunov equations to desired accuracy.
R = 
  SparseBalancedTruncation with properties:

        Sigma: [40×1 double]
       Energy: [40×1 double]
        Error: [40×1 double]
           Lr: [7522×40 double]
           Lo: [7522×123 double]
    Residuals: [6.2579e-09 8.9726e-09]
      Options: [1×1 mor.SparseBalancedTruncationOptions]

view コマンドを使用して、状態の寄与をハンケル特異値として可視化します。

view(R,"sigma")

MATLAB figure

低次元化されたモデルを最大誤差 1e-6 で取得します。これにより、次数 8 のモデルが得られます。

rsys = getrom(R,MaxError=1e-6,Method="truncate");

モデルの特異値応答を比較します。

w = logspace(-7,-3,20);
fsys = frd(sys,w);
sigma(fsys,fsys-rsys,'r--')

MATLAB figure

低次元化されたモデルは最大次数のモデルとよく一致しています。

参考

関数

オブジェクト

トピック