想用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));
}
}