java中没有直接调用matlab的接口函数

java中没有直接调用matlab的接口函数

ID:8799455

大小:69.68 KB

页数:10页

时间:2018-04-08

java中没有直接调用matlab的接口函数_第1页
java中没有直接调用matlab的接口函数_第2页
java中没有直接调用matlab的接口函数_第3页
java中没有直接调用matlab的接口函数_第4页
java中没有直接调用matlab的接口函数_第5页
资源描述:

《java中没有直接调用matlab的接口函数》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、java中没有直接调用matlab的接口函数,在通常的情况下我们是通过借用C++作为中间过程来实现的,使用C++主要是用c与matlab的结构实现c调用matlab的功能,将这些功能函数封装成dll文件,用java语言调用所生成的dll文件,从而实现了调用matlab的功能。java调用c程序利用的是java的jni技术,即javanativeinterface。具体的过程为:1.首先,写一个类:publicclassEng{static{  System.loadLibrary("Eng");   //(1)}publicnativevoidplottest()

2、;//(2)}这个类实现的是调用后面生成的Eng.dll这个动态连接库的功能。在dos环境下编译javaEng.java编译后使用jdk中的javah命令生成jni的头文件javah-jniEng在本目录下就生成了Eng.h这个头文件2.打开vc++6.0新建一个dll的工程名字叫Eng,这个工程名必须和System.loadLibrary("Eng")中的一样,因为编译生成的dll的名字就是这个工程的名字。然后在vc++的环境中添加能够调用matlab的功能所需要的lib和一些环境的设置。(1)Tools->Options->Directories中engine

3、.h所在的路径,笔者所使用的路径为:C:JDK1.5.0INCLUDE,在这个对话框中的"Showdirectoriesfor:"的下拉菜单中选择LibraryFiles,然后添加库文件的路径,在笔者的计算机上的路径是:E:MATLABEXTERNLIBWIN32MICROSOFTMSVC60。(2)Project->Settings->Link在Object/LibraryModules中加上库文件连接:也就是自己手动添加三个文件分别是:libmx.liblibmex.liblibeng.lib(3)将通过javah生成的Eng.h文件拷贝到工程

4、目录中,然后再FileView中导入到工程中,创建新的c++文件为Eng.cpp,用于实现用于上面的头文件中的函数。指定了engine的头文件所在的路径,所以就可以包括这个头文件了。同时加入其它的头文件就可以了。具体的cpp文件内容为:/*Eng.h*/#include"engine.h"#include"stdlib.h"#include"stdio.h"#include"string.h"#include"windows.h"#include"Eng.h"staticdoubleAreal[6]={1,2,3,4,5,6};JNIEXPORTvoidJNICA

5、LLJava_Eng_plottest(JNIEnv*eng,jobjectobj){Engine*ep;mxArray*T=NULL,*a=NULL,*d=NULL;charbuffer[30];double*Dreal,*Dimag;doubletime[10]={0,1,2,3,4,5,6,7,8,9};if(!(ep=engOpen(NULL))){  MessageBox((HWND)NULL,(LPSTR)"can'tstartMatlabengine",(LPSTR)"Engwindemo.c",MB_OK);  exit(-1);}T=mxCrea

6、teDoubleMatrix(1,10,mxREAL);memcpy((char*)mxGetPr(T),(char*)time,10*sizeof(double));engPutVariable(ep,"T",T);engEvalString(ep,"D=.5*(-9.8).*T.^2;");engEvalString(ep,"plot(T,D);");engEvalString(ep,"title('Position');");engEvalString(ep,"xlabel('Time(seconds)');");engEvalString(ep,"ylab

7、el('Position(meters)');");a=mxCreateDoubleMatrix(3,2,mxREAL);memcpy((char*)mxGetPr(a),(char*)Areal,6*sizeof(double));engPutVariable(ep,"A",a);engEvalString(ep,"d=eig(A*A');");engOutputBuffer(ep,buffer,30);;engEvalString(ep,"whos");MessageBox((HWND)NULL,(LPSTR)buffer,(LPSTR)"Matlab-who

8、s",MB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。