6

如何将 matlab 函数句柄传递给 Java 对象并从 Java 中调用它(也就是说,我希望 Java 在准备好计算时告诉 matlab)。我正在尝试使用 com.mathworks.jmi.Matlab 类来评估 Java 对象中的 Matlab 表达式,但我看不到如何 1)将回调函数句柄传输到 Java,以及 2)从 Java 调用它可能使用com.mathworks.jmi.Matlab 类。

谢谢,雅各布

4

5 回答 5

2

唔。看起来 JMI 是 matlab 内部的东西之一,在未来的版本中可能会发生变化。我找到了这些在线文章,不确定它们是否会对您的情况有所帮助。

于 2009-06-17T13:04:57.807 回答
1

恐怕我不知道有一种方法可以完全按照您的要求进行操作,但是您可以通过两种方式执行类似的操作:

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的文章,敬请期待……

亚尔奥特曼

于 2010-03-30T18:20:43.227 回答
1

matlabcontrol是一个 Java API,可让您执行此操作。它可以使用 feval 调用 MATLAB 函数。它不能直接对函数句柄进行操作,但正如 KitsuneYMG 所说,您可以使用func2str将函数句柄转换为字符串。要开始,您可以查看演练

于 2011-07-08T23:55:42.110 回答
0

要将回调传递给 matlab,请将 matlab 函数的名称及其参数传递给 com.mathworks.jmi.Matlab.feval("matlabControlcb", ... , 0); ... 是一个 Object[],其中 [0] = 命令和 [1..end] = 参数。

另见:FEVAL FUNC2STR

于 2010-03-29T13:42:43.567 回答
0

试试这个工具:http: //jamal.sourceforge.net/

它完全符合您的需要并且有据可查。

它基于的主要原理是对在 Matlab 中运行的服务器部分进行 RMI 调用。输出返回给java程序。同样,这取决于jmi ...

于 2010-04-19T22:13:23.633 回答