精华内容
下载资源
问答
  • java调用matlab

    2019-06-19 14:04:10
    java调用matlab1.安装matlab2.matlab .m文件生成jar包 1.安装matlab java调用matlab,需要满足matlab的jdk版本与自己的jdk版本一致,例如JDK1.8的需要2017b以上的版本。 2.matlab .m文件生成jar包 ...

    1.安装matlab

    java调用matlab,需要满足matlab的jdk版本与自己的jdk版本一致,例如JDK1.8的需要2017b以上的版本。

    2.matlab .m文件生成jar包

    在MATLAB的Command Window输入deploytool命令
    在这里插入图片描述
    选择Library Compiler,在弹出的窗口选择Java Package,输入Library name,Class name输入类名,例如plotter(java类,在后边java代码中会用)。点击加号按钮,添加需要导出的.m文件,完成之后,点击右上角的package。
    在这里插入图片描述

    3.引用jar包

    引用两个jar包:

    • matlab安装目录下的toolbox\javabuilder\jar下面的javabuilder.jar
    • 上一步生成的jar包,demo.jar

    4.调用demo

    import com.mathworks.toolbox.javabuilder.MWArray;  
    import com.mathworks.toolbox.javabuilder.MWClassID;  
    import com.mathworks.toolbox.javabuilder.MWComplexity;  
    import com.mathworks.toolbox.javabuilder.MWNumericArray;  
      
    import demo.plotter;  
      
    public class ConnectMatlabTest {  
      
        /**  
         * @param args  
         */  
        public static void main(String[] args) {  
            // TODO Auto-generated method stub  
            MWNumericArray x = null; // 存放x值的数组  
            MWNumericArray y = null; // 存放y值的数组  
            plotter thePlot = null; // plotter类的实例(在MatLab编译时,新建的类)  
            int n = 20; // 作图点数  
      
            try {  
                // 分配x、y的值  
                int[] dims = { 1, n };  
                x = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,  
                        MWComplexity.REAL);  
                y = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,  
                        MWComplexity.REAL);  
      
                // 定义 y = x^2  
                for (int i = 1; i <= n; i++) {  
                    x.set(i, i);  
                    y.set(i, i * i);  
                }  
      
                // 初始化plotter的对象  
                thePlot = new plotter();  
      
                // 作图  
                thePlot.drawplot(x, y);  
                thePlot.waitForFigures();  
            }  
      
            catch (Exception e) {  
                System.out.println("Exception: " + e.toString());  
            }  
      
            finally {  
                // 释放本地资源  
                MWArray.disposeArray(x);  
                MWArray.disposeArray(y);  
                if (thePlot != null)  
                    thePlot.dispose();  
            }  
        }  
      
    }  
    
    

    5.matlab部署环境

    安装matlab提供的MATLAB Compiler Runtime (MCR)
    https://jingyan.baidu.com/article/47a29f248dd3acc0142399be.html

    6.错误解决

    1.报找不到dll文件,需要配置dll目录的环境变量,目录地址:MATLAB Runtime\v96\runtime\win64
    2.报输出参数太多,需要设置返回参数个数,为调用函数的第一个参数
    3.若返回参数为矩阵,需转换为MWNumericArray

    展开全文
  • java调用matlab程序的一个applet-java调用matlab.txt 最近在做java实现多Agent,如有同志可相互切磋,现附上一段java调用matlab程序的程序,希望能帮到有需要的同仁。
  • Java调用MATLAB

    千次阅读 2015-02-05 13:03:53
    Java中使用MATLAB作图 http://blog.csdn.net/xiaowei_cqu/article/details/7038819 在java调用matlab时候遇到了错误  http://bbs.c


    一、版本确认和系统环境变量

      • MATLAB命令确认当前MATLAB版本,操作系统版本,该版本MATLAB要用的Java版本。查询命令如下
        >> ver
         
        ------------------------------------------------------------------------------------------------
        MATLAB Version: 8.1.0.604 (R2013a)
        MATLAB License Number: 724504
        Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)
        Java Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
      • MATLAB命令确认当前MATLAB是32位or64位
        >> computer('arch')
         
        ans =win32
        ------------------------------------------------------------------------------------------------
      • Dos窗口确认当前系统安装的Java版本
        C:\Windows\System32>java -version 
        java version "1.8.0_25" 
        Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
        Java HotSpot(TM) Client VM (build 25.25-b02, mixed mode, sharing)
    可以看到当前系统安装的MATLAB对应的Java版本是1.6,而系统当前安装的事Java1.8,最好换成对应的Java版本。各版本JDK下载地址http://www.oracle.com/technetwork/java/javase/archive-139210.html,注意i586也是x86 都是32位的;x64是64位的。
    • 替换Java JDK的方法很简单,首先将原来的JDK安装文件(包括JDK和JRE)都删掉,然后安装刚刚下载的JDK,安装成功后添加JDK和JRE的环境变量 
      C:\Program Files\Java\jdk1.6.0_17\bin;C:\Program Files\Java\jdk1.6.0_17\jre\bin;
    • 另外还要添加mclmcrrt8_1.dll的环境变量D:\Program Files\Matlab\runtime\win32;,否则运行时可能提示如下错误
      java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt8_1.dll, required by MATLAB Builder JA, on java.library.path.
       This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration.
      The MCR version that this component is trying to use is: 8.1.
      
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.get(
       MCRConfiguration.java:162)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.<clinit>(
       MCRConfiguration.java:168)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getProxyLibraryDir(
       MCRConfiguration.java:173)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.get(
       MCRConfiguration.java:74)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.<clinit>(
       MCRConfiguration.java:84)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getMCRRoot(
       MCRConfiguration.java:89)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ModuleDir.<clinit>(
       MCRConfiguration.java:63)
             at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(
       MCRConfiguration.java:68)
             at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(
       MWMCR.java:1462)
             at plotdemo.PlotdemoMCRFactory.newInstance(
       PlotdemoMCRFactory.java:50 )
             at plotdemo.PlotdemoMCRFactory.newInstance(
       PlotdemoMCRFactory.java:61 )
             at plotdemo.plotter.main(
       plotter.java:115 )

    添加环境变量后,重启系统使环境变量有效。

    二、一个小例子


    在MATLAB中Command窗口中输入deploytool调出部署工具DeploymentTool。新建一个工程,输入工程名plotdemo.prj,选择路径,并选择Target为 Java Package。

    在MATLAB右侧会出现我们新建的工程。
    将画图的MATLAB文件封装成函数drawplot(x,y),文件名drawplot.m
    function drawplot(x, y)
    plot(x, y);


    将刚刚编写的m文件直接拖拽进去,并重命名类名为plotter(plotter就是Java中的类名,函数文件名就是该类的方法,这一点可以从下面的Java文件中得到验证),点击Build编译:



    完成之后就会在我们选择的路径下看到 plotdemo的文件夹,里面有个jar包plotdemo\distrib\plotdemo.jar就是我们在Java工程中要调用的文件。
    Java工程目录如下图

    Java文件内容
    package jinliang.javaMatlab;
    
    import ExampleMatlabLib.PlotExampleMatlab;
    
    /* Necessary package imports */
    import com.mathworks.toolbox.javabuilder.*;
    
    /*
     * PlotExample class demonstrates plotting x-y data into 
     * a MATLAB figure window by graphing a simple parabola.
     */
    public class PlotExample
    {
       public static void main(String[] args)
       {
          MWNumericArray x = null;   /* Array of x values */
          MWNumericArray y = null;   /* Array of y values */
          PlotExampleMatlab plotExampleMatlab = null;    /* Plotter class instance */
          int n = 15;                /* Number of points to plot */
    
          try
          {
             /* Allocate arrays for x and y values */
             int[] dims = {1, n};//维度设置一行n列
             x = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);
             y = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);
    
             /* Set values so that y = x^2 */
             for (int i = 1; i <= n; i++) {
                x.set(i, i);
                y.set(i, i*i);
             }
             byte [] rx =  x.getByteData();//将MWNumericArray转换成以为数组
             for(int i=0;i<rx.length;i++) {
            	 System.out.print(rx[i]);
            	 System.out.print(" ");
             }
             /* Create new plotter object */
             plotExampleMatlab = new PlotExampleMatlab();
    
             /* Plot data */
             plotExampleMatlab.drawplot(x, y);
             plotExampleMatlab.waitForFigures();
          } catch (Exception e) {
             System.out.println("Exception: " + e.toString());
          } finally {
             /* Free native resources */
             MWArray.disposeArray(x);
             MWArray.disposeArray(y);
             if (plotExampleMatlab != null)
                plotExampleMatlab.dispose();
          }
       }
    }

    运行得到的图像

    三、数据的交换

    第二部分的数据传输过程是:Java把数据传给MATLAB函数,MATLAB函数根据该数据画图。
    下面的例子是,Java首先把数据传给MATLAB函数,然后MATLAB把运行结果传给Java
    MATLAB文件:cholesky.m
    function [L] = cholesky(A)
    L = chol(A);
    disp(L)
    Java文件
    package jinliang.javaMatlab;
    
    import ExampleMatlabLib.MatrixMathExampleMatlab;
    
    import com.mathworks.toolbox.javabuilder.*;
    
    public class MatrixMathExample {
    	   public static void main(String[] args) throws MWException
    	   {
    	      MWNumericArray mat = null;   /* Stores matrix to factor */
    	      Object[] result = null;    /* Stores the result */
    	      MatrixMathExampleMatlab theFactor = new MatrixMathExampleMatlab();   /* Stores factor class instance */
    
    	      try {
    	    	 int n=3;
    	    	 int[] dims = {n, n};
    	         double[][] data = {{2,-1,0},{-1,2,-1},{0,-1,2}};
    	         mat = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);
    
    	         /* Set matrix values */
    	         int[] index = {1, 1};
    
    	         for (index[0]= 1; index[0] <= dims[0]; index[0]++) {
    	            for (index[1] = 1; index[1] <= dims[1]; index[1]++) {
    	            	mat.set(index,data[index[0]-1][index[1]-1]);
    	            }
    	         }
    
    
    
    	         /* Print original matrix */
    	         System.out.println("Original matrix:");
    	         System.out.println(mat);
    
    	         /* Compute cholesky factorization and print results. */
    	         result = theFactor.cholesky(1, mat);
    	         System.out.println("Cholesky factorization:");
    	         System.out.println(result[0]);
    	         //double[] a = (double [])((MWArray)result[0]).getData();
    	         //for(int i=0;i<a.length;i++)
    	         //	 System.out.println(a[i]);
    	         MWArray.disposeArray(result);
    
    	      } catch (Exception e) {
    	         System.out.println("Exception: " + e.toString());
    	      } finally {
    	         /* Free native resources */
    	         MWArray.disposeArray(mat);
    	         MWArray.disposeArray(result);
    	         if (theFactor != null)
    	            theFactor.dispose();
    	      }
    	   }
    }

    上面的例子中,Java把一个矩阵传给MATLAB,MATLAB对该矩阵进行分解,然后将结果传给Java。

    MATLAB也可以返回多个数据给Java,如下
    function [L,U] = ludecomp(A)
    [L,U] = lu(A);
    package jinliang.javaMatlab;
    
    import ExampleMatlabLib.MatrixMathExampleMatlab;
    
    import com.mathworks.toolbox.javabuilder.*;
    
    public class MatrixMathExample {
    	   public static void main(String[] args) throws MWException
    	   {
    	      MWNumericArray mat = null;   /* Stores matrix to factor */
    	      Object[] result = null;    /* Stores the result */
    	      MatrixMathExampleMatlab theFactor = new MatrixMathExampleMatlab();   /* Stores factor class instance */
    
    	      try {
    	    	 int n=3;
    	    	 int[] dims = {n, n};
    	         double[][] data = {{2,-1,0},{-1,2,-1},{0,-1,2}};
    	         mat = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);
    
    	         /* Set matrix values */
    	         int[] index = {1, 1};
    
    	         for (index[0]= 1; index[0] <= dims[0]; index[0]++) {
    	            for (index[1] = 1; index[1] <= dims[1]; index[1]++) {
    	            	mat.set(index,data[index[0]-1][index[1]-1]);
    	            }
    	         }
    
    	         /* Compute LU factorization and print results. */
    	         result = theFactor.ludecomp(2, mat);
    	         System.out.println("LU factorization:");
    	         System.out.println("L matrix:");
    	         System.out.println(result[0]);
    	         System.out.println("U matrix:");
    	         System.out.println(result[1]);
    	         MWArray.disposeArray(result);
    
    	      } catch (Exception e) {
    	         System.out.println("Exception: " + e.toString());
    	      } finally {
    	         /* Free native resources */
    	         MWArray.disposeArray(mat);
    	         MWArray.disposeArray(result);
    	         if (theFactor != null)
    	            theFactor.dispose();
    	      }
    	   }
    }

    四、数据类型之间的转换
    第一个Java文件中的语句

    byte [] rx =  x.getByteData();//将MWNumericArray转换成以为数组
    for(int i=0;i<rx.length;i++) {
        System.out.print(rx[i]);
        System.out.print(" ");
    }
    把一维的MWNumericArray转换成了一维byte数组。
    第二个Java语句
    double[] a = (double [])((MWArray)result[0]).getData();
    for(int i=0;i<a.length;i++)
    	 System.out.println(a[i]);
    把一个3*3的MWArray转换成了一维的double []。


    Package com.mathworks.toolbox.javabuilder的API的学习资料
    http://wind.isi.edu/marbles/assets/components/workflow_portal/users/lib/CombinedCNV/MCR/v79/help/toolbox/javabuilder/MWArrayAPI/com/mathworks/toolbox/javabuilder/package-summary.html

    本博客代码见 http://download.csdn.net/detail/u012176591/8426473

    MATLAB自带的例子目录 D:\Program Files\Matlab\toolbox\javabuilder\Examples

    展开全文
  • Java调用Matlab

    千次阅读 2016-07-24 23:30:10
    Java调用Matlab函数图文简易教程:利用MATLAB的Compiler工具将MATLAB函数编译成.jar文件,在Eclipse中实现对.jar文件中函数的调用,以此实现MATLAB和JAVA的混合编程。
       Matlab和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。 
       MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 
       Matlab给我们提供了许多强大的功能,在新的版本中也加入了对C,C++,Java,Fortran的支持,下面就简单介绍一下如何利用MATLA
    展开全文
  • java 调用matlab

    2015-02-16 11:19:30
     最近在研究java调用matlab,网上查了一堆资料。先下载了matlab2014a安装配环境,折腾了半天,结果缺乏dll文件,转到matlab技术论坛咨询了一下,人家说可能我下载的安装包dll文件被人删除了,悲剧。由于时间紧迫,...

                                                                                                                  java 调用matlab

      最近在研究java调用matlab,网上查了一堆资料。先下载了matlab2014a安装配环境,折腾了半天,结果缺乏dll文件,转到matlab技术论坛咨询了一下,人家说可能我下载的安装包dll文件被人删除了,悲剧。由于时间紧迫,又换成了matlab2012a。

      matlab2012a环境配置了半天,发现jdk又只支持1.6的,所以果断将本机jdk也换成了1.6,目前java已经能够成功调用,不过matlab不同版本差异还是比较大的。

      问题又来了,matlab的函数库不懂,继续学习函数库咯,懂的大神可以分享一下资源哈!

     


    
    展开全文
  • Java 调用Matlab

    千次阅读 2016-05-31 13:34:03
    在安装jdk时版本需要一致2、matlab的安装matlab的版本必须是2006b+或者更高的版本,因为只有这些版本中才有MATLAB Build for Java(也叫 Java Builder)3、调用基本步骤3.1打开matlab,新建脚本,打开Editor窗口。...
  • java 调用 matlab

    2014-04-10 23:07:42
    java调用matlab混合编程 来源: 马良华的日志 本来想偷懒用java直接调matlab进行模拟调制的,没想到遇到问题一堆,看来若干教程才搞定,做个集合方便自己以后查询。 英语不好真的是硬伤啊硬伤 掩面 T 。T...
  • Java调用Matlab程序

    2021-09-18 21:16:48
    Java调用Matlab程序_Macrocell-CSDN博客_java调用matlab
  • Java调用matlab

    2016-10-18 16:47:43
    matlab强大的数据计算能力,可以给java调用。我前段时间写了一个matlab的最优化算法,想给Java调用,期间遇到很多问题,罗列如下:matlab代码必须形如:function[x]=testpurchase(price,amount,prop)这种函数形式 2....
  • JAVA 调用matlab

    万次阅读 2010-09-26 17:15:00
    前段时间摸索了java调用matlab东西,不说学的有多深,也算有结果了,达到目的了。也即用java程序可以调用matlab中函数了。 按顺序说吧,最开始肯定是下个matlab看看。下哪一个呢。开始下一个7.0觉得很新了。后来才...
  • 小弟近日毕设关系不得不使用Java调用Matlab下写的函数。于是问题出现了:Linux:Ubuntu 10.04 Matlab:2011RaJAVA_HOME配置没问题使用DeployTool等网络上能找到的传统方法都顺利。但是在Eclipse或者直接使用java命令...
  • JAVA调用Matlab

    2018-10-24 20:52:55
    首先配置一个和matlab版本一致的JDK版本,我使用的时Matlab16是JDK1.7u60,但是平时我用的是1.8版本,所以我还要下载1.7下来,安装,然后在系统环境变量哪里新建一个JAVA_HOME1.7, 然后把JAVA_HOME里面的原来配置的...
  • java调用matlab测试源码

    2017-05-18 13:43:35
    源码,包含2个matlab的java工程,1个java调用matlab的工程
  • 0.系统以及程序版本Win 7(64 bits)MATLABR2013a(64 bits)MyEclipse 10(64 bits)Java 7(64 bits)1.环境配置主要是Java的环境配置。在系统属性-高级系统设置-环境变量按如下设置:1)配置JAVAHOME:值:D:\Program Files...
  • java调用matlab流程

    2013-07-15 21:19:07
    实现java调用matlab程序的 基本流程
  • How do I pass a matlab function handle to a Java object and invoke it from within Java (that is, I want Java to tell matlab when it is ready with a calculation). I am trying to use the ...
  • Java调用MATLAB,将文件转换为二进制流,http://blog.csdn.net/GSH_Hello_World/article/details/78524897
  • Java调用Matlab程序代码

    2019-01-12 17:19:10
    Java调用Matlab程序代码 本文介绍一下如何通过Java代码调用Matlab代码。因为Matlab画图优势非常明显,所以在制作软件或者封装功能时需要使用其他代码调用Matlab代码。 Java调用Matlab代码目前来说常规方法只有一种,...
  • Java调用Matlab函数

    2019-04-02 21:35:56
    Java调用Matlab函数准备工作生成jar包 准备工作 总体上来讲,就是将Matlab程序打包成jar包供Java程序调用。 首先要安装Matlab和JDK,其中要保证Matlab支持的java版本跟你电脑上安装的java版本保持一致。Matlab查看...
  • 三、java调用matlab函数范例 Part 1:matlab打包jar包 1、需保持matlab和java开发环境所使用的jdk版本一致 matlab中查看jdk版本命令如下: &gt;&gt; getenv JAVA_HOME ans = 'C:\Java\jdk1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,918
精华内容 9,567
关键字:

java调用matlab

java 订阅
matlab 订阅