最近要实现一个算法,需要用到矩阵运算,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文件如下
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/*
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 = { 1 , 1 };
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();
}
}
}
* 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 = { 1 , 1 };
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();
}
}
}