从Matlab如何返回多个参数到一个Java程序

4视图(30天)
我做一个Java程序,必须调用matlab函数。我收到了一些简单的测试程序来玩所以我可以学习它是如何运作的。
我的问题是,一个matlab测试程序返回两个参数,但是在Java程序中我只看到/。
这是matlab代码:
函数[着干活,out2] = test_Java5 (in1, in2)
%
%[着干活,out2] = test_Java5 (in1, in2)
%
%着干活= ' ABC ';
% out2 =“DEF”;
%
disp (in);
disp ();
disp (in2);
着干活=“ABC”;
out2 =“DEF”;
结束
这是Java方法调用matlab和打印输出:
私人静态孔隙testJava5 (Testfunctions测试){
MWCharArray一个=零;
MWCharArrayb =零;
结果对象[]=零;
试一试{
System.out.println (“开始testJava5”);
一个= new MWCharArray (“玛丽·史密斯”);
b = new MWCharArray (“John Doe”);
结果=测试。test_Java5 (a, b);
System.out.println (”结果= "+ result.length);
(int i = 0;我< result.length;我+ +){
System.out.println (" Type = "+ +结果[我].getClass ()”,结果= "[我])+结果;
}
System.out.println (“完成testJava5”);
}(Throwable t) {
t.printStackTrace ();
}最后{
a.dispose ();
b.dispose ();
MWArray.disposeArray(结果);
}
}
这是我的Java程序的输出:
开始testJava5
玛丽史密斯
约翰美国能源部
结果= 1
类com.mathworks.toolbox.javabuilder Type =。MWCharArray,结果= ABC
完成了testJava5
正如你所看到的输出,matlab打印出的两个输入参数,但是Java程序只接收一个参数作为MWCharArray(字符串)。
我所预期的那样,我的结果数组包含两个记录,或者结果[0]是装有两个MWCharArrays MWArray型。但apperently不是。
我做错了吗?
PS:我知道,我可以使用一个struct相反,但我们有一个非常复杂的输入和输出,这将使事情变得更容易如果是分离。

接受的答案

Kaustubha Govind
Kaustubha Govind 2011年7月8日
AFAIK,第一个参数被传递到方法是预期的输出参数。所有你需要做的是改变:
结果=测试。test_Java5 (a, b);
:
结果=测试。test_Java5 (a, b);
2的评论
Neeraj
Neeraj 2012年11月3日
上面的代码我都试了,但我的计划是无法找到TestFunctions类。我将不胜感激如果你回复关于:(I)这类/包导入在上面的程序。(2)如何包含TestFunctions类(iii)你可以参考我一些代码使用,我可以从外部JAVA程序调用MATLAB函数(MATLAB之外)之外,得到的输出(可能是一个对象)回到我的JAVA程序(即从MATLAB环境之外的)。(iv)我用jdk1.7 / jre7但我的matlab R2011b jvm版本1.6。你能告诉我天气matlab . jar文件将与jre7 / jdk1.7兼容。

登录置评。

更多的答案(3)

gb8
gb8 2012年9月19日
另一个示例。和a[1、2][1]和返回y = [1, 2] + b [1]
Java代码
- - - - - - - - - - - - - * * * * * * * * * * * * * * * * * * * * * * * - - - - - - - - - - - - - - - - - -
进口java.util.ArrayList;进口java.util.Arrays;进口并不知道;
进口mTeste.mTESTEClass;进口com.mathworks.toolbox.javabuilder。*;
公开课证人{
/ * * *启动应用程序。* /公共静态void main (String [] args) {
/ * * *创建框架。* /
mTESTEClass =零;MWNumericArray b =零;MWNumericArray c =零;结果对象[]=零;MWStructArray =零;尝试{
一个= new mTESTEClass ();双[]前= {2,3};b = new MWNumericArray (ex);c = new MWNumericArray (3);结果=。soma (1, b, c);
System.out.println (result.length);System.out.println(结果[0]);
}捕捉(MWException e) {/ / TODO自动生成的catch块e.printStackTrace ();最后}{b.dispose ();c.dispose ();MWArray.disposeArray(结果);a.dispose ();}}}
- - - - - - - - - - - - - * * * * * * * * * * * * * * * * * * * * * * * - - - - - - - - - - - - - - - - - -
MatLAB代码-
和a [1、2] [1]
——函数之和(matlab)
函数y = soma (a, b)
%总结这个函数%详细解释了这里
y (1) = (1) + b;y (2) = (2) + b;

Neeraj
Neeraj 2012年11月3日
我想调用外部java程序在不同的jvm的matlab程序,同时通过一些参数(最好是一个java对象)。它是如何可能的? ?

穆罕默德Mahmudoglu
穆罕默德Mahmudoglu 2016年12月26日
编辑:穆罕默德Mahmudoglu 2016年12月28日
根据Matlab函数 matrixoperations 计算两个向量的叉积和矩阵添加一个常数值。
函数[vectorout, matrixout] = matrixoperations (vector_in1、vector_in2 matrix_in)
% vectorout输出两个向量的叉积
% matrixout是除了matrix_in + 4的输出
%的例子(vectorout, matrixout)
% = matrixoperations ([1 3 4], [2 3 4], [3 3 4; 1 2 3 3 4 5])
vectorout =交叉(vector_in1 vector_in2);
matrixout = matrix_in + 4;
多个输入和输出与司机在下面的Java类
进口com.mathworks.toolbox.javabuilder。*;
进口matrixoperations.BasicMatrixOpClass;
公共类BasicMatrixOperationsDriver {
公共静态void main (String [] args) {
/ *的数组vector_in1值* /
MWNumericArrayvector_in1 =零;
/ *的数组vector_in2值* /
MWNumericArrayvector_in2 =零;
/ *的数组matrix_in值* /
MWNumericArraymatrix_in =零;
/ *商店BasicMatrixOp类实例* /
BasicMatrixOpClassrunOperations =零;
结果对象[]=零;
试一试{
双[]vector_in1_data = {1, 3, 4};
vector_in1 = new MWNumericArray
(vector_in1_data MWClassID.DOUBLE);
双[]vector_in2_data = {2、3、4};
vector_in2 = new MWNumericArray
(vector_in2_data MWClassID.DOUBLE);
双[][]matrix_in_data = {
{3、3、4},
{1,2,3},
{3、4、5}
};
matrix_in = new MWNumericArray
(matrix_in_data MWClassID.DOUBLE);
/ *创建新的BasicMatrixOpClass对象* /
runOperations = new BasicMatrixOpClass ();
结果= runOperations.matrixoperations
(2 vector_in1 vector_in2 matrix_in);
System.out.println ();
System.out.println (“vectorout”);
System.out.println(结果[0]);
System.out.println (“matrixout”);
System.out.println(结果[1]);
}(MWException e) {
/ / TODO自动生成
e.printStackTrace ();
}
最后
{
MWArray.disposeArray (vector_in1);
MWArray.disposeArray (vector_in2);
MWArray.disposeArray (matrix_in);
runOperations.dispose ();
}
}
}

类别

找到更多的在Java包集成帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!