matlab関数ハンドルをJavaオブジェクトに渡し、Java内から呼び出すにはどうすればよいですか(つまり、計算の準備ができたときにJavaにmatlabに通知させます)。com.mathworks.jmi.Matlabクラスを使用してJavaオブジェクトのMatlab式を評価しようとしていますが、1)コールバック関数ハンドルをJavaに転送し、2)Javaから呼び出す方法がわかりません。 com.mathworks.jmi.Matlabクラス。
ありがとう、ヤコブ
matlab関数ハンドルをJavaオブジェクトに渡し、Java内から呼び出すにはどうすればよいですか(つまり、計算の準備ができたときにJavaにmatlabに通知させます)。com.mathworks.jmi.Matlabクラスを使用してJavaオブジェクトのMatlab式を評価しようとしていますが、1)コールバック関数ハンドルをJavaに転送し、2)Javaから呼び出す方法がわかりません。 com.mathworks.jmi.Matlabクラス。
ありがとう、ヤコブ
うーん。JMIは、将来のバージョンで変更される可能性のあるmatlab内部のものの1つであるように見えます。私はこれらのオンライン記事を見つけましたが、あなたの場合に役立つかどうかはわかりません。
残念ながら、あなたが要求したことを正確に行う方法がわかりませんが、同様のことを行う方法が 2 つあります。
1) Matlab 内から Java コールバックを設定する場合、Matlab 関数ハンドルを送信できます。Java コールバック イベントが発生すると、Matlab 関数が呼び出されます。この例は、http: //UndocumentedMatlab.com/blog/uicontrol-callbacks/にあります。これを実行するために JMI を必要としないことに注意してください。
2) JMI は、Matlab が評価する文字列 (関数名またはコマンド ライン) を必要とします。関数名が事前にわかっていれば、それを使用できます。それ以外の場合は、コールバックを適切な Matlab アクションに動的に向けるために、Matlab スイッチ ヤード関数 (その名前は事前に知られています) を準備できます。
4 月中旬にhttp://UndocumentedMatlab.comの Web サイトでJMI に関する記事を掲載する予定ですので、お楽しみに...
ヤイル・アルトマン
matlabcontrolは、それを可能にする Java API です。feval を使用して MATLAB 関数を呼び出すことができます。関数ハンドルを直接操作することはできませんが、KitsuneYMG で述べられているように、func2str を使用して関数ハンドルを文字列に変換できます。開始するには、ウォークスルーをご覧ください。
このツールを試してください: http://jamal.sourceforge.net/
それはあなたが必要とすることを正確に行い、十分に文書化されています。
それが基づいている主な原則は、Matlab 内で実行されるサーバー部分への RMI 呼び出しを行うことです。出力は Java プログラムに返されます。繰り返しますが、それはjmiに依存します...
コールバックを matlab に渡すには、matlab 関数の名前とその引数を com.mathworks.jmi.Matlab.feval("matlabControlcb", ... , 0); に渡します。... は Object[] で、[0] = コマンド、[1..end] = 引数です。
関連項目: FEVAL FUNC2STR