• 初探java和matlab混合编程


    最近要实现一个算法,需要用到矩阵运算,matlab的强项就是进行矩阵运算,所以要高效进行矩阵运算,就要在java中调用matlab。关于环境变量等的相关配置,请大家参考此文

    http://www.cnblogs.com/allanyz/archive/2009/05/04/1449081.html

    下面我要讲的例子是matlab自带的例子,位置在MATLABroot\R2008a\toolbox\javabuilder\Examples。

    大家在matlab联机帮助文件中输入matlab build for java就能搜出此例子

    个人认为这个例子比较精髓,通过这个例子可以完整的弄明白java是如何调用matlab进行矩阵运算的

    此例的java文件如下

    代码
    /* getfactor.java
     * This file is used as an example for the MATLAB
     * Builder JA product.
     *
     * Copyright 2001-2006 The MathWorks, Inc.
     
    */

    /* Necessary package imports */
    import com.mathworks.toolbox.javabuilder.*;
    import factormatrix.*;

    /*
     * getfactor class computes cholesky, LU, and QR 
     * factorizations of a finite difference matrix
     * of order N. The value of N is passed on the
     * command line. If a second command line arg
     * is passed with the value of "sparse", then
     * a sparse matrix is used.
     
    */
    class getfactor
    {
       
    public static void main(String[] args)
       {
          MWNumericArray a 
    = null;   /* Stores matrix to factor */
          Object[] result 
    = null;    /* Stores the result */
          factor theFactor 
    = null;   /* Stores factor class instance */

          
    try
          {
             
    /* If no input, exit */
             
    if (args.length == 0)
             {
                System.out.println(
    "Error: must input a positive integer");
                
    return;
             }

             
    /* Convert input value */
             
    int n = Integer.valueOf(args[0]).intValue();

             
    if (n <= 0)
             {
                System.out.println(
    "Error: must input a positive integer");
                
    return;
             }

             
    /*
              * Allocate matrix. If second input is "sparse"
              * allocate a sparse array 
              
    */
             
    int[] dims = {n, n};

             
    if (args.length > 1 && args[1].equals("sparse"))
                a 
    = MWNumericArray.newSparse(dims[0], dims[1],n+2*(n-1), MWClassID.DOUBLE, MWComplexity.REAL);
             
    else
                a 
    = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);

             
    /* Set matrix values */
             
    int[] index = {11};

             
    for (index[0= 1; index[0<= dims[0]; index[0]++)
             {
                
    for (index[1= 1; index[1<= dims[1]; index[1]++)
                {
                   
    if (index[1== index[0])
                      a.set(index, 
    2.0);
                   
    else if (index[1== index[0]+1 || index[1== index[0]-1)
                      a.set(index, 
    -1.0);
                }
             }

             
    /* Create new factor object */
             theFactor 
    = new factor();

             
    /* Print original matrix */
             System.out.println(
    "Original matrix:");
             System.out.println(a);

             
    /* Compute cholesky factorization and print results. */
             result 
    = theFactor.cholesky(1, a);
             System.out.println(
    "Cholesky factorization:");
             System.out.println(result[
    0]);
             MWArray.disposeArray(result);

             
    /* Compute LU factorization and print results. */
             result 
    = theFactor.ludecomp(2, a);
             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);

             
    /* Compute QR factorization and print results. */
             result 
    = theFactor.qrdecomp(2, a);
             System.out.println(
    "QR factorization:");
             System.out.println(
    "Q matrix:");
             System.out.println(result[
    0]);
             System.out.println(
    "R matrix:");
             System.out.println(result[
    1]);
          }

          
    catch (Exception e)
          {
             System.out.println(
    "Exception: " + e.toString());
          }

          
    finally
          {
             
    /* Free native resources */
             MWArray.disposeArray(a);
             MWArray.disposeArray(result);
             
    if (theFactor != null)
                theFactor.dispose();
          }
       }
    }
  • 相关阅读:
    静态字段==全局变量
    异常处理原则
    结合冒泡排序学习委托和事件系列一
    Linq详解
    linq的延迟执行和立即执行
    统计一个目录下所有.cs文件的行数
    Multicast委托和Observer模式——委托系列二
    usb设备插入电脑,电脑显示MTP带有黄色感叹号,(Windows已找到设备的去驱动程序,但在尝试安装他们时遇到错误),解决办法
    博客地址变更
    Flex在线阅读 FlexBook FlexPaper
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/1688545.html
Copyright © 2020-2023  润新知