パフォーマンスを改善するモデル化手法
初期化フェーズの高速化
以下の手法で初期化フェーズを高速化することでシミュレーション速度を向上させます。
マスク エディターを使用したグラフィックスの簡略化
複雑なグラフィックスや大きなイメージを読み込んでレンダリングするには時間がかかります。このようなイメージを含むマスク ブロックが原因でモデルの応答性が低くなる可能性があります。可能であれば、マスク ブロックから複雑な描画やイメージを削除してください。
イメージを保持する場合は、より小さい低解像度のバージョンに置き換えます。マスク エディターを使用して、image()
の呼び出しで読み込まれるイメージを保持するようにアイコン描画コマンドを編集します。
マスク エディターの詳細は、マスク エディターの概要を参照してください。
関数呼び出しの統合
モデルを開くか更新したときに、Simulink® によってマスク初期化コードが実行されます。モデルに set_param
の多数の呼び出しを含む複雑なマスク初期化コマンドが含まれている場合は、連続する呼び出しを複数の引数ペアをもつ 1 つの呼び出しに統合してください。呼び出しを統合すると、これらの関数呼び出しに伴うオーバーヘッドを削減できます。
詳細は、マスク コールバック コードを参照してください。
MAT ファイルを使用したデータの読み込み
MATLAB® スクリプトを使用してデータの読み込みと初期化を行う場合は、代わりに MAT ファイルを読み込むことでパフォーマンスを改善できます。MAT ファイルのデータはバイナリ形式であるため、スクリプトよりも作業が難しくなることがあります。ただし、読み込み操作では通常、同等の MATLAB スクリプトよりも迅速にデータが初期化されます。
詳細については、信号データ用の MAT ファイルを参照してください。
モデルの対話機能の軽減
一般に、モデルがより対話型になるほど、シミュレーションにかかる時間が長くなります。以下の手法でモデルの対話機能を軽減してください。
診断の無効化
一部の診断機能を使用すると、シミュレーション速度が大幅に低下することがあります。[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断] ペインで診断動作パラメーターを無効にすることを検討してください。
メモ
[配列範囲の超過] 診断パラメーターや [ソルバー データの不整合] 診断パラメーターを使用すると、シミュレーションの速度が低下する可能性があります。詳細については、配列範囲の超過およびソルバー データの不整合を参照してください。
MATLAB のデバッグ機能の無効化
MATLAB Function ブロックのコードなどの MATLAB コードが正しく機能していることを確認した後に、[コンフィギュレーション パラメーター] ダイアログ ボックスで以下の診断パラメーターを無効にします。
[診断] 、 [データ有効性] ペインで [オーバーフロー時にラップ] をオフにします。
[シミュレーション ターゲット ペインの [詳細設定パラメーター] で [セミコロンなしの式をエコー] をオフにします。
BLAS ライブラリのサポートの使用
シミュレーションに低水準の MATLAB 行列演算が含まれている場合は、基本線形代数サブプログラム (BLAS) ライブラリを使用して、高度に最適化された外部の線形代数ルーチンを活用します。
Stateflow アニメーションの無効化
既定では、Stateflow® チャートにおいて、モデル内の現在のアクティブ ステートが強調表示され、モデルのシミュレーション時に発生する状態遷移がアニメーション化されます。この機能はデバッグに役立ちますが、シミュレーションが遅くなります。
シミュレーションを高速化するには、すべての Stateflow チャートを閉じるか、アニメーションを無効にします。同様に、以下を使用している場合は、アニメーションを無効にするかシーンの忠実度を下げることを検討してください。
Simulink 3D Animation™
Simscape™Multibody™ の可視化
FlightGear
その他の 3 次元アニメーション パッケージ
詳細は、シミュレーションの高速化 (Stateflow)を参照してください。
スコープ ビューアー プロパティの調整
モデルに高レートのログを表示するスコープ ビューアーが含まれており、そのスコープを削除できない場合は、ビューアー プロパティを調整し、レンダリング速度のために忠実度を犠牲にします。
ただし、間引きを使用してプロットされるデータ点の数を減らすと、短い過渡状態や、データ点が多い場合であれば確認できるその他の現象を見落とす可能性があります。可視化の有効化をより正確に制御するには、ビューアーを Enabled Subsystem に配置します。
詳細については、Scope Viewer を参照してください。
モデルの複雑度の軽減
シミュレーションのパフォーマンスを改善するために、以下の手法で忠実度を犠牲にすることなくモデルを簡略化します。
サブシステムを忠実度の低い代替方法に置換
複雑なサブシステムを次のいずれかの代替方法に置き換えます。
System Identification Toolbox™ を使用して測定入出力データから作成された線形または非線形動的モデル。
Model-Based Calibration Toolbox™ を使用して作成された忠実度の高い非線形統計モデル。
Simulink Control Design™ を使用して作成された線形モデル。
ルックアップ テーブル。詳細については、ルックアップ テーブルを参照してください。
サブシステムの両方の表現をライブラリに保持し、Variant Subsystem を使用して管理することができます。モデルによっては、全体的な結果に影響を与えずにこの置き換えを行うことができます。詳細については、生成コードのルックアップ テーブル ブロックに対する最適化を参照してください。
ブロック数の削減
モデル内のブロック数を減らすと、シミュレーション中に計算を必要とするブロックが少なくなり、シミュレーション時間が短縮されます。モデル内のブロック数を減らす方法の 1 つにベクトル化があります。たとえば、モデルに一連の同様の計算が行われる信号が複数含まれている場合は、Vector Concatenate ブロックを使用してそれらの信号を 1 つのベクトルにまとめるようにします。シミュレーションでは、ベクトル内の各要素について個別に計算が実行されるのではなく、ベクトルに対して 1 回だけ計算が実行されます。
フレームベースの処理の使用
フレームベースの処理では、Simulink はサンプルを 1 つずつではなく一括で処理します。たとえば、モデルにアナログ デジタル コンバーターが含まれている場合、バッファー内の出力サンプルを収集できます。このバッファーを高速フーリエ変換などの単一の操作で処理します。このようにデータをまとまりとして処理すると、シミュレーションでモデル内のブロックの呼び出しが必要になる回数が減ります。
一般に、フレーム サイズが大きくなるとスケジューリングのオーバーヘッドが低下します。ただし、フレームが大きくなるとメモリの消費量が増えるため、メモリ制限が生じて複雑なモデルのパフォーマンスに悪影響が出る場合があります。さまざまなフレーム サイズを試して、メモリの問題を回避しながらフレームベースの処理のパフォーマンス上のメリットを最大限に高めるサイズを見つけてください。
ソルバーの選択と構成
Simulink は、スティッフなシステムとノンスティッフなシステムを処理するためのソルバーの総合的なライブラリを備えており、このライブラリには固定ステップ ソルバーと可変ステップ ソルバーが含まれています。各ソルバーは、次のシミュレーション ステップの時間を判断し、数値的手法を適用して、モデルを表す常微分方程式を解きます。
選択したソルバーとソルバー オプションはシミュレーション速度に影響する可能性があります。以下の条件に従って、モデルのパフォーマンスを改善できるソルバーを選択し、構成してください。詳細については、ソルバーの選択を参照してください。
システムのスティッフ
スティッフなシステムは、ゆっくり変化する連続ダイナミクスとすばやく変化する連続ダイナミクスをもっています。陰的ソルバーはスティッフな問題の場合に特に役立ちます。陽的ソルバーはノンスティッフなシステムに適しています。陽的ソルバーを使用してスティッフなシステムを解くと、正しい結果が得られない可能性があります。ノンスティッフなソルバーが非常に短いステップ サイズでモデルの解を求めている場合、これはシステムがスティッフであることを示しています。
モデルのステップ サイズとダイナミクス
可変ステップ ソルバーを使用するか固定ステップ ソルバーを使用するかを決める際は、モデルのステップ サイズとダイナミクスに注意してください。タイム ステップを使用して重要なダイナミクスのみを取得するソルバーを選択します。次のタイム ステップの解を得るために必要な計算のみを実行するソルバーを選択します。
ステップ サイズがモデルの基本サンプル時間以下である場合は、固定ステップ ソルバーを使用します。可変ステップ ソルバーではステップ サイズが動的に調整されるため、ステップ サイズは変化する場合があります。そのため、一部のタイム ステップのステップ サイズが基本サンプル時間よりも長くなり、シミュレーションの完了に要するステップ数が減ります。一般に、可変ステップ ソルバーを使用するシミュレーションの方が固定ステップ ソルバーを使用する場合よりも短時間で実行されます。
モデルの基本サンプル時間がいずれかのサンプルレートと等しい場合は、固定ステップ ソルバーを選択します。モデルの基本サンプル時間が最速のサンプルレートを下回る場合は、可変ステップ ソルバーを選択します。また、可変ステップ ソルバーを使用すると連続ダイナミクスを取得することもできます。
ソルバーの次数の削減
ソルバーの次数を減らす場合は、Simulink が状態出力を特定するために実行する計算の数を減らします。これにより、シミュレーション速度が向上します。ただし、ソルバーの次数が減ると結果の精度が低下します。許容可能な精度の結果が得られる最小のソルバーの次数を選択してください。
ソルバーのステップ サイズまたは許容誤差の増加
通常、ソルバーのステップ サイズまたは許容誤差を増やすとシミュレーション速度が向上しますが、精度は損なわれます。このような変更を行うと、シミュレーション中に Simulink で重要である可能性のあるダイナミクスを失うおそれがあるため、変更は慎重に行ってください。
ゼロクロッシング検出の無効化
可変ステップ ソルバーは、変数がゆっくり変化するときにはステップ サイズを増加させ、急速に変化するときには減少させて、ステップ サイズを動的に調整します。この動作によってソルバーは不連続点付近で小さいステップを取りますが、これは変数の変化が急であるためです。精度は向上しますが、多くの場合、シミュレーション時間が長くなります。
このような状況に伴ってタイム ステップが小さくなり、シミュレーションが長くなることを回避するために、Simulink はゼロクロッシング検出を使用してこのような不連続点を正確に特定します。操作のモード間での頻繁な変動 (チャタリングと呼ばれる現象) の発生を示すシステムでは、このゼロクロッシング検出を使用すると逆効果になり、シミュレーション速度が低下する可能性があります。このような状況では、ゼロクロッシング検出を無効にするとパフォーマンスを改善できます。
ゼロクロッシング検出は、モデル内の特定のブロックで有効または無効にできます。パフォーマンスを改善するために、シミュレーションの精度に影響しないブロックでゼロクロッシング検出を無効にすることを検討してください。
詳細については、ゼロクロッシング検出を参照してください。
モデルの操作点の保存
多くの場合、同じモデルについて、入力、境界条件、操作条件を変化させて複数のシミュレーションを実行します。状況によっては、このようなシミュレーションでは、モデルが初期状態から別の状態に遷移する共通のスタートアップ フェーズが共有されます。たとえば、さまざまな制御シーケンスをテストする前に、電気モーターを目的の状態にすることができます。
システムがスタートアップ フェーズから遷移する際にモデルの操作点を保存して、その操作点を今後のシミュレーションの初期状態として使用できます。この手法ではシミュレーション速度は向上しませんが、スタートアップ フェーズのシミュレーションが 1 回だけで済むため、連続する実行の合計シミュレーション時間を短縮できます。詳細については、モデル操作点を使用したシミュレーション ワークフローの高速化を参照してください。