Java与Matlab混合编程是一种运用Matlab数学方面的优势处理一些数学算法、数据、图像后,转换成Java可识别的一种Jar包,在Java中继续编程其余后台功能的一种手段,实现了技术优势的结合。
一般来讲,很多数学问题基本上需要用python和matlab去编程才能简单、高效地解决。我作为一名数学+软件双专业的学生,因为需要做一个数学课题的应用网站,所以在核心数学功能编写上采用了此种混合编程的方法。可能是因为这个技术很low(现在比较流行的方法可能是直接用python去编写或者调用python的数学库),所以资料还是比较少的,在这边记录一下自己使用过程。
1.matlab编程并打包
首先需要下载一个matlab应用程序,下载安装的过程中最好工具都下载全,不然后续可能会出现缺乏某些组件或工具的情况。接着在自己的电脑上安装好与你下载的matlab版本内置要求的jdk相一致的jdk(不同版本需要的jdk版本不一样,像我下载的是matlab2015a,它要求的jdk版本就是jdk1.7及以下的版本)。上述步骤完成后进行编程,matlab可打包的是function函数,参考代码如下
需要New 一个function函数,X,D,count是要输出的结果,也是你在后面Java调用时得到的结果,A,eps为未知变量,也是你在Java调用时需要赋值的参数。接着在主窗口敲入deploytool,然后在跳出的选项中点击Library Compiler
选择Java Package,点+号选择要打包的.m文件,然后可以对包名和类名进行修改,最后点击Package进行打包
打包后会出现如下文件夹,打开for_redistribution_files_only
将其中的jar复制,同时还要去\matlab\bin\test\for_redistribution_files_only中去复制javabuilder.jar
2.Jar包放入Java
我用的编辑器是Idea,直接把Jar包拷入项目中,右键点击Add as Library
因为项目是web项目,还需要把jar包添加进/WEB-INF/lib。步骤是点击file-点击project structure-点击Artifacts,右键jar包点击Put into/WEB-INF/lib
3.编写调用类
我这个主要是输入矩阵,输出矩阵特征值、特征向量和迭代次数
MWNumericArray q = null;
MWNumericArray z=null;
Object[] result1 = null;
Jacobi js=null;
int[][] data={{2, -1, 1}, {1, -2, 1}, {1, 1, -1}};
double ps=Math.pow(Math.E,-12);
try
{
q =new
MWNumericArray(data, MWClassID.DOUBLE);
z=new
MWNumericArray(ps,MWClassID.DOUBLE);
String str2 = String.valueOf(q);
System.out.println(str2);
js=new Jacobi();
result1 =js.eig_Jacobi(2,q,z);
System.out.println(result1[0]);
System.out.println(result1[1]);
String value= String.valueOf(result1[0]);
System.out.println(value);
} catch(
MWException e)
{
e.printStackTrace();
} finally
{
MWArray.disposeArray(z);
MWArray.disposeArray(q);
MWArray.disposeArray(result1);
js.dispose();
}
}
运行结果如下
4.矩阵输入的前端页面处理
动态表格传入矩阵,html代码