シミュレーションのためのビッグ データの処理
多くのタイム ステップと信号によるモデルのシミュレーションには、大き過ぎてコンピューターの RAM に収まらないビッグ データが含まれる可能性があります。以下のような状況が該当します。
シミュレーション データのログ記録 (信号ログ、出力端子ログ、状態ログ)
モデルをシミュレーションするための入力信号データの読み込み
複数または並列シミュレーションの実行
シミュレーションのためのビッグ データを処理するには、データを MAT ファイルの永続ストレージに保存します。シミュレーションに対してビッグ データ手法を使用する際に、データがワークスペース メモリに十分収まるくらい小さい場合は、必要以上の追加ステップが要求されます。モデルを開発するときは、メモリをオーバーロードするビッグ データ要件がモデルに含まれていることがわかっている場合を除き、永続ストレージを使用せずにシミュレーション データの記録および読み込みを行うことを検討してください。
ビッグ データのワークフロー
この例では、1 つのシミュレーションによって生成され、別のシミュレーションによって入力として使用されるビッグ データを処理するワークフローの概要について説明します。主なワークフロー タスクの詳細については、次を参照してください。
ヒント
この例では SimulationDatastore
オブジェクトを使用してデータをモデルにストリーミングします。または、DatasetRef
オブジェクトを直接モデルにストリーミングすることもできます。
2 つのモデルを構成して、複数の信号をログに記録します。
モデルのシミュレーションを行い、各モデルのデータを永続ストレージにログ記録します。
sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat'); sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');
ビッグ データを含むログ記録では、データを永続ストレージに v7.3 MAT ファイルとして保存する必要があります。
Dataset
形式で記録されたデータのみがファイルに保存されます。他の形式 (Structure with time
など) で記録されたデータは、ベース ワークスペース内のメモリに保存されます。永続ストレージにログ記録するデータは、シミュレーション中に小さいチャンクでストリーミングされ、メモリ要件を最小限に抑えます。データは、各ログ データセット (たとえば、
logsout
とxout
) のDataset
オブジェクトを含むファイル内に保存されます。特定のログ信号セット用に
DatasetRef
オブジェクト (dsr1
とdsr2
) を作成します。その後、DatasetRef
オブジェクトの要素値のSimulationDatastore
オブジェクト (dst1
とdst2
) を作成します。このコード例では、最初のシミュレーションに関するlogsout
の 12 番目の要素に対してSimulationDatastore
を作成します。2 番目のシミュレーションついては、このコード例はlogsout
の 7 番目の要素値としてSimulationDatastore
オブジェクトをもつ信号を作成します。インデックス付けに中かっこを使用できます。dsr1 = Simulink.SimulationData.DatasetRef('data1.mat','logsout'); dsr2 = Simulink.SimulationData.DatasetRef('data2.mat','logsout'); dst1 = dsr1{12}; dst2 = dsr2{7};
SimulationDatastore
オブジェクトを別のシミュレーションの外部入力として使用します。SimulationDatastore
データを読み込むには、そのデータをDataset
オブジェクトに含めます。データ ストア入力は MAT ファイルから段階的に読み込まれます。3 番目の入力はtimeseries
オブジェクトです。このオブジェクトは、段階的ではなく全体としてメモリに読み込まれます。input = Simulink.SimulationData.Dataset; input{1} = dst1; input{2} = dst2; ts = timeseries(rand(5,1),1,'Name','RandomSignals'); input{3} = ts; sim(mdl3,'ExternalInput','input');
SimulationDatastore
オブジェクトを利用するには、MATLAB® のビッグ データ解析を使用します。SimulationDatastore
オブジェクトの値を読み取ることで、timetable
オブジェクトを作成します。関数read
はデータの一部を読み取ります。関数readall
はすべてのデータを読み取ります。tt = dst1.Values.read;
MATLAB セッションを、tall
timetable
を利用するためのグローバル実行環境 (mapreducer
) として設定します。SimulationDatastore
オブジェクトから talltimetable
を作成し、メモリ内データをもつtimetable
オブジェクトを読み取ります。mapreducer(0); ttt = tall(dst1.Values);
ヒント
ビッグ シミュレーション データの扱い方を示す別の例については、ビッグ データの取り扱いを参照してください。
参考
関数
Simulink.SimulationData.Dataset
|timeseries
|Simulink.SimulationData.DatasetRef
|matlab.io.datastore.SimulationDatastore