java matlab函数 mwnumericarray,java中調用Matlab的函數+注意事項 | 學步園

一、matlab版本必須支持java

在command 模式下面運行deploytool,如果支持該命令即可使用

二、matlab中function的書寫

%定義一個函數operation(a,b),求a與b的加減乘除運算,並返回結果

%函數定義function 輸出變量列表[s,m,...] 函數名(輸入變量列表)sum,sub,mul,div中

function [sum,sub,mul,div] = operation(a,b);

sum = a + b;

sub = a - b;

mul = a * b;

div = a / b;

end

PS:上面標紅的部分與java中調用該operation的返回值有關係,在java中調用的 Object result[] = XXX.operation(4,a,b); 4表示有4個返回值,分別存放在result[0]到result[4]中。

三、使用matlab編譯生成jar

在matlab命令窗口下輸入 deploytool,就會彈出一個編譯窗口,

然後點擊,file,選擇new-deployment project,

然後選擇matlab builder jave。

name的地方填寫工程名,

ocation填寫該工程的存儲位置。

點擊ok。

然後,把m文件添加到工程中,先new一個class,這個class的名字就是你將來在java中需要new的class的名字,也就是matlab中operation所在的class名字然後將你的m文件添加到這個class目錄下,然後直接build即可。

四、在java中使用matlab的函數

現在eclipse下面new一個新的java工程,然後將第三部build成功後產生的文件夾下面的distrib目錄中的XXX.jar 以及你matlab安裝目錄下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。

然後你可以清晰的看到XXX.jar中包含的函數和類

[java] view plaincopyprint?

importcom.mathworks.toolbox.javabuilder.MWException;

importcom.mathworks.toolbox.javabuilder.MWNumericArray;

importXXX.XXXX;

classTest {

publicstaticvoidmain(String[] args) {

try{

XXXX abc=newXXXX();

Object[] result =null;/* Stores the result */

inta=10, b=2;

result=abc.operation(4, a, b );

System.out.println(result[0].toString());

System.out.println(result[1].toString());

System.out.println(result[2].toString());

System.out.println();

}catch(MWException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}finally{

/* Free native resources */

System.gc();

}

}

如果result[0]返回的是一個數組,可以通過如下的方法解決

MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);

MWNumericArray temp = (MWNumericArray)result[0];

float [][] weights=(float[][])temp.toFloatArray();

五、可能碰到的問題

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path. This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration. The MCR version that this component is trying to use is: 7.13.

Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path

原因是2009a要對應安裝mclmcrrt7.10。在MATLAB安裝目錄下查找:\toolbox\compiler\deploy\win32,找到MCRInstaller.exe 安裝,重啟Eclipse即可。

也有可能遇到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: d:\Program Files\MATLAB\R2009a\bin\win32\nativemcl.dll

at java.lang.ClassLoader.loadLibrary(Unknown Source)

at java.lang.Runtime.load0(Unknown Source)

at java.lang.System.load(Unknown Source)

at com.mathworks.toolbox.javabuilder.internal.MWMCR.(MWMCR.java:1449)

at operation.OperationMCRFactory.(OperationMCRFactory.java:99)

at operation.Operation.(Operation.java:61)

at JavaTestMatlab.main(JavaTestMatlab.java:18)

是說找不到nativemcl.dll文件。我的系統是64位系統,所以在bin目錄下是win64文件夾。為了適應,我在bin目錄下新建了一個win32文件夾,把nativemcl.dll複製到裡面去。

後來報錯為:

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Program Files\MATLAB\R2009a\bin\win32\nativemcl.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

at java.lang.ClassLoader$NativeLibrary.load(Native Method)

at java.lang.ClassLoader.loadLibrary0(Unknown Source)

at java.lang.ClassLoader.loadLibrary(Unknown Source)

at java.lang.Runtime.load0(Unknown Source)

at java.lang.System.load(Unknown Source)

at com.mathworks.toolbox.javabuilder.internal.MWMCR.(MWMCR.java:1449)

at operation.OperationMCRFactory.(OperationMCRFactory.java:99)

at operation.Operation.(Operation.java:61)

at JavaTestMatlab.main(JavaTestMatlab.java:18)

用eclipse做開發時,其中一個jar包需要使用jni去引用dll文件,出現這個錯誤

Can't load AMD 64-bit .dll on a IA 32-bit platform

我的系統是win7 64位的,我發現eclipse使用的jre是32位的

解決辦法使用jre_x64運行,把dll文件放到工程下面:

下載地址

http://www.oracle.com/technetwork/java/javase/downloads/jre-6u26-download-400751.html

配置:

458bd3e822e9641281c25403322c33ae.png

a0101ec2315583cb1c61f1b0de3b67ea.png

d10d8d4f671a8f3c3b6857ba4fcd0d84.png

9ec7669210e6c9834c01980ab8416d0c.png

創建工程時選擇jre_x64

運行時:

9e60e003bc79621835b87741cb03cb6a.png

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值