9

我正在尝试调用一个用户定义的 Matlab 函数(M 文件),它从我在 Eclipse 中开发的 Java 应用程序中获取 3 个参数(Java 字符串)。目前,我可以使用函数/命令(如or )调用proxy.eval和方法。但是当我尝试调用一个用户定义的函数时,它在 matlab 控制台上说没有这样定义的函数,并且在 Java 控制台上发生了。proxy.fevaldispsqrMatlabInvocationException

然后我尝试了一个简单的用户定义函数,它不带参数,只有一行disp('Hello'),但结果仍然相同。所以我认为不是类型转换问题,而是如何调用用户定义的函数有问题。

请问有人能尽快帮助我吗?我很快就要赶上这个项目的最后期限了。如果有人能提出解决方案,我将不胜感激。(Joshuwa Kaplan 先生,在您的帖子中是否有解决此类问题的指南?我试过但一无所获)

提前致谢

4

1 回答 1

11

您必须在MATLAB 搜索路径上有任何用户定义的 m 文件,就像您在 MATLAB 中正常工作一样。

我用下面的例子进行了测试:

C:\some\path\myfunc.m

function myfunc()
    disp('hello from MYFUNC')
end

HelloWorld.java

import matlabcontrol.*;

public class HelloWorld
{
    public static void main(String[] args)
        throws MatlabConnectionException, MatlabInvocationException
    {
         // create proxy
         MatlabProxyFactoryOptions options =
            new MatlabProxyFactoryOptions.Builder()
                .setUsePreviouslyControlledSession(true)
                .build();
        MatlabProxyFactory factory = new MatlabProxyFactory(options);
        MatlabProxy proxy = factory.getProxy();

        // call builtin function
        proxy.eval("disp('hello world')");

        // call user-defined function (must be on the path)
        proxy.eval("addpath('C:\\some\\path')");
        proxy.feval("myfunc");
        proxy.eval("rmpath('C:\\some\\path')");

        // close connection
        proxy.disconnect();
    }
}

我们编译并运行 Java 程序:

javac -cp matlabcontrol-4.0.0.jar HelloWorld.java
java -cp ".;matlabcontrol-4.0.0.jar" HelloWorld

将打开一个 MATLAB 会话,并显示输出:

hello world
hello from MYFUNC

您也可以一次将您的文件夹添加到路径中,然后使用 SAVEPATH 将其持久化。这样你就不必每次都这样做了。

于 2011-08-27T04:56:57.770 回答