この場合、ベース ワークスペースにニューラル ネットワーク (NN) インスタンスがあり、これを Simulink でのシミュレーションで使用したいと考えています。ネットで使用する必要がある入力引数を使用して、Embedded Matlab 関数で NN の使用をラップしました。
原則として、私は次のようなことをしたいと思っています:
function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');
目標はnet
、ベース ワークスペース (クラスのインスタンスnetwork
) からオブジェクトをフェッチすることです。
evalin
これは、ワークスペースから変数を読み取っていた問題のスイングです。
function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('evalin');
net = evalin('base', 'net'); %Fetch net from workspace
XBDDprime = net([F XB XBD XBDD]'); %Error!
simulink は net が配列であり、net(...)
配列の添え字であると考えているように見えるため、これはコンパイルされません (実際のエラー メッセージ: mxArray への添え字はサポートされていません)。
Simulink は、埋め込まれた matlab 関数をコンパイルできるようにするために使用されるオブジェクトの完全な定義を持っている必要があるように思えますが、それは正しいですか? 解決策はありますか?Simulink.Signal
どうにかして NN をラップし、それを引数として関数ブロックに追加できますか?
編集
ファイルからload
シリアル化されたオブジェクトをロードするためにも使用してみました。net
それもうまくいきませんでした。コンパイラs
がmxArray
.
function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('load')
s = load('net');
XBDDprime = s.net([F XB XBD XBDD]');
解決
最後に、上記の例のように見える matlab 関数ブロックに行きました。