资源描述:
《java和maltab混合编程研究u》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Java和matlab混合编程研究摘要:为了能结合Java和Matlab两者的优点,构造功能更加强大的科学计算环境,对如何进行Java和Matlab混合编程进行了研究,首先介绍了Java调用Matlab函数的基本方法,在此基础上结合工程上的实际应用,解决了材料力学中三向应力的求解问题。关键词:Java;Matlab;三向应力0、引言Matlab是美国MathWorks公司推出的一款可视化的数值计算软件,是目前学术界和工程界最为流行的科学计算工具,具有强大的数值计算,矩阵计算,信号处理和图形图像处理功能。不过Matlab虽然功能强大,但界面开发能力较差,并且其程序不能脱离Matlab环境独立运行
2、。Java是一种可靠稳定、跨平台、面向对象的语言。其语言本身的安全性很高并引入了一些日益重要的复杂任务,比如多线程和网络编程,这些工作用java实现起来轻而易举。然而,Java在数据分析和处理方面的能力却不那么突出,尤其是在对数组矩阵之类的数据进行操作时会因为多次循环而速度变得缓慢,这在数组或矩阵位数很大时缺点尤为突出[1]。如果用Matlab和java混合编程开发Windows的应用程序则可以实现优势互补,缩短开发时间,降低程序设计的复杂度。同时程序可以脱离Matlab环境独立运行,在工程计算和教学实践中都具有实际意义。1、使用java调用Maltab函数的基本方法使用java调用Malta
3、b函数的基本方法是:通过JavaBuilder实现Java调用Matlab。在Java环境中直接调用Matlab所生成的Jar包。下面以在Java中产生任意维数的魔方矩阵,计算任意矩阵的特征向量和特征值,对两组数据进行拟合并绘制拟合曲线三个实例来说明通过JavaBuilder实现Java调用Matlab的过程。传统的纯Java编程实现上述实例非常复杂,甚至很难完成。这一问题在Matlab中只需要调用几个函数即可完成。1.1、将Matlab函数包装成Java类首先在Matlab中编写三个M文件:Eig.mfunction[v,d]=Eig(input)formatlong[v,d]=eig(in
4、put);EndMagic.mfunctionf=Magic(input)f=magic(input);endPlot.mfunctionPlot(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中新建一个DeploymentProject,名称为MyProject.prj,类型为Javapackage。在Project中新建三个Class,分别为GetEig,GetMagic
5、,PolyFit。将Eig.m,Magic.m,plot.m分别添加到上述Class中。之后点击Buildertheproject,等待编译成功即可。1.2、在Java中调用Matlab函数新建一个Java类JavaMatlab,并引入相关的包。importcom.mathworks.toolbox.javabuilder.*;//引入Matlab相关包importMyProject.*;//引入建立的包及类调用时Java与Matlab之间的参数传递需要通过MWNumericArray完成。具体的调用代码如下:packageorg.genius.ExpandJava;importMyProje
6、ct.*;importcom.mathworks.toolbox.javabuilder.*;publicclassJavaMatlab{publicstaticvoidmain(String[]args){MWNumericArraya=null;//用于保存矩阵MWNumericArrayax=null;//用于保存矩阵MWNumericArrayay=null;//用于保存矩阵Object[]result=null;//用于保存计算结果GetEiggetEig=null;GetMagicgetMagic=null;PolyFitpolyFit=null;intr=4;//魔方矩阵维数in
7、tarray[][]={{50,-20,0},{-20,80,60},{0,60,-70}};doublex[]={0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1};doubley[]={-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.3,11.2};try{//产生魔方矩阵并打印a=newMWNumericArr