2009-06-17 14 views
6

matlab関数ハンドルをJavaオブジェクトに渡して、Java内から呼び出すにはどうすればいいですか(つまり、計算の準備が整ったらJavaからmatlabに指示します)。 JavaオブジェクトのMatlab式を評価するためにcom.mathworks.jmi.Matlabクラスを使用しようとしていますが、1)コールバックfuncktionハンドルをJavaに転送することができません。2)Javaから呼び出す方法com.mathworks.jmi.MatlabクラスJavaからmatlabコールバック/関数ハンドルを呼び出す

おかげで、 ヤコブ

答えて

2

うーん。 JMIは、将来のバージョンで変更される可能性のあるMATLAB内部のものの1つです。私はこれらのオンライン記事を見つけましたが、あなたの場合に役立つかどうかはわかりません。

+0

ありがとう、これらの記事を見つけましたが、関数ハンドルコールバックをjavaに渡してjavaから呼び出す方法を教えていません。私がjmiを使って作業する唯一のことは、javaからmatlabコマンドを評価することでしたが、matlabに(javaから)特定の関数ハンドルを実行するように指示する必要があります。 –

+0

私の推測ではできません。私は似たような問題にぶつかりました(MATLABからのJavaコールにコールバックインターフェイスとしてMatlab関数を渡そうとしていますが、matlabにマーシャリングする方法はありません)。 –

0

MATLABにコールバックを渡すには、(あなたは、MATLAB関数の名前を渡し、それがcom.mathworks.jmi.Matlab.fevalへの引数です"matlabControlcb"、...、0); ... [0] =コマンドと[1..end] =引数のObject []です。

参照:fevalをFUNC2STR

1

は、私はあなたが要求した正確何を行う方法を知らないことを恐れてんだけど、あなたは似た何かを行うことができ、2つの方法があります:

1は、 )Matlab内からJavaコールバックを設定した場合、Matlab関数ハンドルを送ることができます。 Javaコールバックイベントが発生すると、Matlab関数が呼び出されます。これの例は、http://UndocumentedMatlab.com/blog/uicontrol-callbacks/にあります。これはJMIを実行する必要はないことに注意してください。

2)JMIにはMatlabが評価する文字列(関数名またはコマンドライン)が必要です。関数名が分かっていれば、それを使うことができます。それ以外の場合は、コールバックを適切なMatlabアクションに動的に向けるMatlabスイッチヤード関数(名前は事前にわかっています)を準備することができます。

私は4月中旬http://UndocumentedMatlab.comウェブサイトにJMIについての記事を実行し、そのチューニング滞在する予定

...

Yairアルトマン

+1

これを行う別の方法は、http://undocumentedmatlab.com/blog/matlab-callbacks-for-java-events/で説明されているように、Javaコード内からイベントを発生させ、このイベントにMatlabコールバックを置くことです。 –

0

は、このツールを試してみてください。http://jamal.sourceforge.net/

それは正確に何をしてあなたは必要であり、十分に文書化されています。

Matlabの内部で実行されるサーバー部分に対してRMI呼び出しを行うことが主な原則です。出力はjavaプログラムに返されます。再び、それはjmiに依存します...

1

matlabcontrolは、これを可能にするJava APIです。 fevalを使用してMATLAB関数を呼び出すことができます。関数ハンドルで直接操作することはできませんが、KitsuneYMGで述べたように、func2strを使用して関数ハンドルを文字列に変換することができます。開始するには、walkthroughをご覧ください。

関連する問題