gpt4 book ai didi

java - 如何使用 matlabcontrol.jar 从 Java 调用用户定义的 Matlab

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:38 25 4
gpt4 key购买 nike

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

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

谁能尽快帮助我?我很快就要 catch 这个项目的最后期限了。如果有人能提出解决方案,我将不胜感激。 (Joshuwa Kaplan 先生,您的帖子中有解决此类问题的指南吗?我试过了,但什么也没找到)

提前致谢

最佳答案

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

我用下面的例子测试过:

C:\some\path\myfunc.m

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

Hello World .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 session ,并显示输出:

hello world
hello from MYFUNC

您也可以将您的文件夹添加到路径一次,然后使用 SAVEPATH 保存它。这样您就不必每次都这样做。

关于java - 如何使用 matlabcontrol.jar 从 Java 调用用户定义的 Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com