熱モデルのスパースの平衡化打ち切り
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")
低次元化されたモデルを最大誤差 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--')
低次元化されたモデルは最大次数のモデルとよく一致しています。
参考
関数
オブジェクト
トピック
- Task-Based Model Order Reduction Workflow
- スパース モデルの基礎
- Heat Distribution in Circular Cylindrical Rod (Partial Differential Equation Toolbox)