如何将 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) 如果你在 Matlab 中设置了一个 Java 回调,你可以给它发送一个 Matlab 函数句柄。当引发 Java 回调事件时,将调用您的 Matlab 函数。可以在此处找到一个示例:http: //UndocumentedMatlab.com/blog/uicontrol-callbacks/。请注意,这不需要 JMI 来运行。
2) JMI 需要一个字符串(函数名或命令行)供 Matlab 评估。如果您事先知道函数名称,则可以使用它。否则,您可以准备一个 Matlab switch-yard 函数(其名称是预先知道的)来动态地将您的回调指向适当的 Matlab 动作。
计划4月中旬在http://UndocumentedMatlab.com网站上发表一篇关于JMI的文章,敬请期待……
亚尔奥特曼
matlabcontrol是一个 Java API,可让您执行此操作。它可以使用 feval 调用 MATLAB 函数。它不能直接对函数句柄进行操作,但正如 KitsuneYMG 所说,您可以使用func2str将函数句柄转换为字符串。要开始,您可以查看演练。
要将回调传递给 matlab,请将 matlab 函数的名称及其参数传递给 com.mathworks.jmi.Matlab.feval("matlabControlcb", ... , 0); ... 是一个 Object[],其中 [0] = 命令和 [1..end] = 参数。
另见:FEVAL FUNC2STR
试试这个工具:http: //jamal.sourceforge.net/
它完全符合您的需要并且有据可查。
它基于的主要原理是对在 Matlab 中运行的服务器部分进行 RMI 调用。输出返回给java程序。同样,这取决于jmi ...