当前位置: 代码迷 >> J2SE >> 哪位高手用java和matlab混合编程
  详细解决方案

哪位高手用java和matlab混合编程

热度:82   发布时间:2016-04-23 20:35:43.0
谁用java和matlab混合编程
想用matlab实现算法,再用java面向对象,谁有类似经验?
------解决方案--------------------
没用过matlab,你可以考虑用MATLAB生成dll,然后在java中用JNI调用这个dll
------解决方案--------------------
使用matlab编写算法实现,然后打个jar出来给java程序使用,注意形参的类型, 当初传个矩阵给matlab都弄了好久调不通
------解决方案--------------------
1. Desktop -> Deployment Tool  可以将写好的matlab代码(m文件)打包成jar包。
2. 将导出来的jar包和javabuilder.jar包放在classes路径,
3. 写Java代码调用吧,注意矩阵在java代码里是 MWNumericArray表示的,

4. 参考资料: 
http://blog.sina.com.cn/s/blog_6476250d01012j1j.html
http://www.matlabsky.com/article-56-1.html

5. 我写的调用regress进行多元回归方程的例子,可用调通。用junit运行

import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;

import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;

import Regress.FunSample;
import Regress.Regress;

public class MatlabTest {
// 测试复杂函数调用,多元回归方程,!!复杂的地方在于数据类型和数据结构的转换!!
@Test
    public void testRegress() throws MWException {
Regress reg = new Regress();

double[][] y_java = { { 14 }, { 20 }, { 26 }, { 213 } };
MWNumericArray  y = new MWNumericArray(y_java,MWClassID.DOUBLE);

double[][] X_java = { {1, 2, 3}, { 2,3,4}, {3,4,5}, {10,100,1}};
MWNumericArray  X = new MWNumericArray(X_java,MWClassID.DOUBLE);

        Object[] result = reg.regress(4, y, X);
        // b
        System.out.println(result[0]);
        // r
        System.out.println(result[2]);
        
        MWNumericArray r = (MWNumericArray) result[2];
        
        System.out.println("-------------r------------");
        System.out.println(r.getDouble(1));
    }

}
  相关解决方案