使用 MATLAB可以较使用传统的编程语言(如 C、C++ 和 Fortran)更快地解决技术计算问题。
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。
想了解更多有关matlab的详情,推荐咨询达内教育。达内教育是引领行业的职业教育公司,致力于面向IT互联网行业,培养软件开发工程师、系统管理员、UI设计师、网络营销工程师、会计等职场人才,拥有强大的师资力量,实战讲师对实战经验倾囊相授,部分讲师曾就职于IBM、微软、Oracle-Sun、华为、亚信等企业,其教研团队更是有独家26大课程体系,助力学生系统化学习,同时还与各大高校进行合作,助力学生职业方向的发展。感兴趣的话点击此处,免费学习一下
Java和matlab混合编程
如果用Matlab和java混合编程开发Windows的应用程序则可以实现优势互补,缩短开发时间,降低程序设计的复杂度。同时程序可以脱离Matlab环境独立运行,在工程计算和教学实践中都具有实际意义。
1.使用java调用Maltab函数的基本方法是:通过Java Builder实现Java调用Matlab。在Java环境中直接调用Matlab所生成的Jar包。
下面以在Java中产生任意维数的魔方矩阵,计算任意矩阵的特征向量和特征值,对两组数据进
行拟合并绘制拟合曲线三个实例来说明通过Java
Builder实现Java调用Matlab的过程。传统的纯Java编程实现上述实例非常复杂,甚至很难完成。这一问题在Matlab中只需要调用几个
函数即可完成。
1.1、将Matlab函数包装成Java类
首先在Matlab中编写三个M文件:
Eig.m
function [v,d]=Eig(input)
format long
[v,d]=eig(input)
End
Magic.m
function f =Magic( input )
f=magic(input)
end
Plot.m
function Plot(x,y )
p=polyfit(x,y,3)
t=min(x):max(x)/100:max(x)
s=polyval(p,t)
plot(x,y,'*',t,s)
title('数据拟合结果')
xlabel('x')
ylabel('y')
end
其次,在Matlab中新建一个Deployment
Project,名称为MyProject.prj,类型为Java
package。在Project中新建三个Class,分别为GetEig,GetMagic,PolyFit。将
Eig.m,Magic.m,plot.m分别添加到上述Class中。之后点击Builder the project,等待编译成功即可。
1.2、在Java中调用Matlab函数
新建一个Java类JavaMatlab,并引入相关的包。
import com.mathworks.toolbox.javabuilder.*//引入Matlab相关包
import MyProject.*//引入建立的包及类
调用时Java与Matlab之间的参数传递需要通过MWNumericArray完成。具体的调用代码如下:
package org.genius.ExpandJava
import MyProject.*
import com.mathworks.toolbox.javabuilder.*
public class JavaMatlab {
public static void main(String[] args) {
MWNumericArray a = null// 用于保存矩阵
MWNumericArray ax = null// 用于保存矩阵
MWNumericArray ay = null// 用于保存矩阵
Object[] result = null// 用于保存计算结果
GetEig getEig = null
GetMagic getMagic=null
PolyFit polyFit=null
int r = 4// 魔方矩阵维数
int array[][]={{50,-20,0},{-20,80,60},{0,60,-70}}
double x[]={0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
double y[]={-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.3,11.2}
try {
//产生魔方矩阵并打印
a = new MWNumericArray(r, MWClassID.DOUBLE)
getMagic = new GetMagic()
result = getMagic.Magic(1,a)
System.out.println("产生的四维魔方矩阵:")
System.out.println(result[0])
MWArray.disposeArray(result)
//计算所给矩阵的特征向量和特征值并打印结果
a = new MWNumericArray(array, MWClassID.DOUBLE)
getEig = new GetEig()
result = getEig.Eig(2, a)
System.out.println("原始矩阵:")
System.out.println(a.toString())
System.out.println("得到的特征向量:")
System.out.println(result[0])
System.out.println("得到的特征值:")
System.out.println(result[1])
MWArray.disposeArray(result)
ax = new MWNumericArray(x, MWClassID.DOUBLE)
ay = new MWNumericArray(y, MWClassID.DOUBLE)
polyFit = new PolyFit()
result=polyFit.Plot(ax,ay)
polyFit.waitForFigures()
} catch (Exception e) {
System.out.println("Exception: " + e.toString())
}
finally {
// 释放本地资源
MWArray.disposeArray(a)
MWArray.disposeArray(ax)
MWArray.disposeArray(ay)
MWArray.disposeArray(result)
getEig.dispose()
getMagic.dispose()
polyFit.dispose()
}
}
}