Java与Matlab混合编程

来源:互联网 发布:c4d软件有多大 编辑:程序博客网 时间:2024/05/02 17:49

Java与Matlab混合编程


注意:转载请说明,来自转自itboy-木小草尊重原创,尊重技术

环境要求

Matlab至少是2015a及以上版本,之前我用的2014b怎么都不行,最后在http://www.matlabsky.com/上看到说是2014班没有破解完全
java我用的1.7,应该没什么要求

matlab导jar包

写好matlab之后,在控制台打deploytool,选择导出jar包,起名字,选择路径什么的,都很简单,然后完成了还要等一会,就能得到jar包了。

使用Matlab的jar包

  1. 在java工程属性的BuildPath中添加两个jar包:

    matlabroot\toolbox\javabuilder\jar\javabuilder.jar
    TestDirectory\flying.jar

  2. 编写函数示例如下

package test; /** * test for a Matlab Call **/ import com.mathworks.toolbox.javabuilder.*; import flying.*; public class testMatlabClass {     /**     * @param args     */     public static void main(String[] args) {         // TODO Auto-generated method stub         try {            System.out.println("Begin");            flyingclass flyingDraw=new flyingclass();            System.out.println("Middle");            flyingDraw.mydraw(7,2);            System.out.println("Here");         }catch (Exception e){           System.out.println(e);        }     } } 
  1. 如果不能正常运行,可以考虑在 classpath 中,加入 flying.jar 所在的位置。

详细

  1. 参见 matlab 的帮助文件

  2. http://www.simwe.com/forum/archiver/tid-747229.html

  3. 数据类型相关

Java 的数值型数组,可以直接作为输入参数传递到 .m 文件上。

如:mydraw(x,y) ,可以画x=[1 2 3 4] ,y=[3.3 -5 6 10.2]这样的线图。Java调用该方法时候,如果传递的参数是整型或者实数型数组,则直接可成功。如java中:

int[] a = new int[4]; int[] b = new int[4]; // 给 a,b 赋值 …// … // 调用 flyingclass flyingDraw = new flyingclass(); flyingDraw.mydraw(a,b); 

注意:a,b 最好所有有索引的位置都有值,否则如果没有充分赋值曲线可能会最终折回(0,0)点。

Matlab程序(.m文件)的修改

  1. 找到TestDirectory\flying.jar所在的位置(因为按照上述步骤的话,.m源文件就在该位置附近)。这个位置,从Eclipse的Package Explore可以用看到。

  2. 直接修改欲改动的.m文件

  3. 打开Matlab, 在Command输入Deploytool, 在新打开的部署面板中,“打开”该m文件所在的工程,如flying.prj。

  4. 选中相应工程下Class 文件夹下的.m文件,点击工具栏的Build按钮。

  5. 则相应源文件被重新编译。如果按照前面步骤添加的jar包,则编译后新生成的jar包自动替换掉原有的jar。又由于这个jar的位置已经作为BuildPath告诉了java的相应工程,因此Java端不需要做任何调整即可正确调用到新修改了内容的matlab方法。

    注意:转载请说明,来自转自itboy-木小草尊重原创,尊重技术

1 0