質問: transpose(out_data); end このようにプログラムを組んだのですが、 ′′ブロック線図 'dsm' では、[コンフィギュレーション パラメーター] ダイアログ内の 'stoptime' に指定された式 'tsim' の評価中にエラーが発生しました: 関数または変数 'tsim' が未定義です。′′ とエラーが表示され実行することができませんでした。tsimはtsim=(sp)*tsと設定しているのですが、なぜ未定義となってしまうのでしょうか。
回答: これは、 |parfor| 内でループの外の変数が見えていないから起きます。一番簡単な対処法はループ内のコードを一つの関数としてまとめる方法です。 実際に |dsim| のモデル内でどの変数が必要か分かりませんが、仮に |a|, |fsin|, |tsim| が使われている場合、それらを入力として受け付ける関数を書きます。 j = [0,1,2,3,4,5.6]; % モデルに引き渡すパラメータの組 parfor i = 1:length(j) b{i} = simmodel(j(i),fsin,tsim); end %%%%% function b = simmodel(a,fsin,tsim) simout = sim('dsm','srcworkspace','current'); out_data = get(simout,'out_data'); % シミュレーション出力オブジェクトから抽出 b = transpose(out_data); end %%%%% |sim| は既定の設定でベースワークスペースの変数を参照するため、関数内で実行するには |srcworkspace| を |current| に設定する必要があります。また、それを行うと出力データはシミュレーション出力オブジェクトに格納されるので、抽出する必要があります。 参考: * *