【问题标题】:Calling matlab callback/function handle from Java从 Java 调用 matlab 回调/函数句柄
【发布时间】:2009-06-17 08:49:56
【问题描述】:

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

谢谢, 雅各布

【问题讨论】:

    标签: java matlab callback function-handle


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我找到了那些文章,但它们没有告诉我如何将函数句柄回调传递给 java 并从 java 调用它们。我通过 jmi 进行的唯一工作是从 java 评估 matlab 命令,但我需要告诉 matlab(来自 java)执行特定的函数句柄。
    • 我猜你做不到。我遇到了类似的问题(试图将 Matlab 函数作为回调接口传递到来自 MATLAB 的 java 调用中——没有明显的方法来编组到 matlab 中)并且运气不好。
    【解决方案2】:

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

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

    亚尔奥特曼

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      另见:FEVAL FUNC2STR

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-29
          • 2015-10-31
          • 1970-01-01
          • 1970-01-01
          • 2011-03-26
          • 1970-01-01
          • 2019-01-23
          相关资源
          最近更新 更多