Matlab_Simulink:微分ブロックの近似精度検証(無料公開)

実現したいこと

  • Simulink微分ブロックの近似精度を検証
  •  \frac{du}{dt}ブロック」と「 sブロック」の近似誤差の検証
  • サンプリング時間[s]によってどの程度精度が変化するのか

Matlabのバージョン

Matlab2021a
※ダウンロード形式として過去のバージョンも用意

必要なtoolbox

ダウンロードURL

【ダウンロードリンク】

Derivative - Google ドライブ

※ご利用中のMatlabバージョンのフォルダをダウンロードしてください。
 例:2021aバージョンであれば,上記リンクの「2021a」を選択
※上記プログラムの利用で生じたトラブルは一切の責任を負いかねます

フォルダ構成

上記ダウンロードし展開。
(下記のようなフォルダ構成になっていることを確認)


※gfigure.m:複数グラフを画面上に並び替える関数。詳細は下記の記事参照。

Matlab:グラフを番号順に画面上に自動で並び替え(マウス作業からの解放)

実行方法

「Main_derivative_m.m」を実行
Simulinkを閉じるとシミュレーション時間は非常に速くなります。

Simulinkファイル(Derivative_simulink.slx)

mファイルソースコード(Main_derivative_m.m)

%% 初期化
clc         % コマンドウィンドウの初期化
clear       % ワークスペースの初期化
close all   % グラフを全部閉じる

%% 変数宣言
% ===== シミュレーション時刻関係 =====
FinalTime = 8;     % シミュレーション終了時刻[s]

% ===== Simulink関係 =====
N_File = 'Derivative_simulink.slx'; % simulinkファイル名

%% Simulinkの実行
SamplingTime_array = [1, 0.5, 0.1, 0.01]; % 配列:検証したいサンプリング時間[s];

for counter = 1 : length(SamplingTime_array)
    
    SamplingTime = SamplingTime_array(counter); % サンプリング時間[s];
    
    sim(N_File);    % Simulinkの実行
    
    % ===== Simulinkデータ格納 =====
    t_sim = ScopeData.time;                     % 時刻情報
    y_dudt_sim = ScopeData.signals(1).values(:, 1);  % 出力
    y_s_sim = ScopeData.signals(1).values(:, 2);  % 目標値
    u_sim = ScopeData.signals(2).values(:, 1);  % 入力
    
    % ===== グラフ描画 =====
    % ----- y -----
    figure;
    subplot(211);
    plot(t_sim,y_dudt_sim);
    hold on;
    plot(t_sim,y_s_sim,'--');
    grid on;
    xlabel('$ t {\rm [s]} $', 'interpreter', 'latex');
    ylabel('derivative', 'interpreter', 'latex');
    legend('$ y_1(t) $', '$ y_2(t) $', 'interpreter', 'latex','Location','best');
    sgtitle(['Samplijng Time: ', num2str(SamplingTime), ' [s]']);
    % ----- u -----
    subplot(212);
    plot(t_sim,u_sim);
    hold on;
    grid on;
    xlabel('$ t {\rm [s]} $', 'interpreter', 'latex');
    ylabel('$ u(t) $', 'interpreter', 'latex');
end

open(N_File);   % Simulinkを起動

%% 画面上に並び替え
gfigure 500 400 row 1:4 disp 1

実行結果

まとめ・考察

上記結果から,Sampling Timeが小さければ小さいほど(右側のグラフ), \frac{du}{dt}ブロックと sブロックの誤差が小さいことが確認できる。したがって,近似精度を向上させるためには,サンプリング時間を小さくする必要がある(計算時間が相対的に長くなる)。
※もしグラフが小さい場合は,上記画像をクリックしてください。

併せて確認推奨の過去記事

forfree.hatenablog.jp