找回密码
 注册
关于网站域名变更的通知
查看: 395|回复: 1
打印 上一主题 下一主题

Matlab函数的编写及java对该函数的调用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-30 11:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

" U& a, J+ M, E& F! _& Y7 ^一、matlab版本必须支持java8 U5 S) r0 s" d1 k1 ^3 H% P- j5 ^
在command 模式下面运行deploytool,如果支持该命令即可使用7 `1 o5 x& ^# G  @: I9 y9 H
. _0 ^% h3 v) j( {9 L' {) u& X

6 g) N, m, I7 r, z5 d
$ r) j1 q/ r8 P4 j4 S/ a$ R二、matlab中function的书写
# D; D; \0 R) H' Q8 h
; p8 y; ^; ?. M%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果
6 @- E7 X1 y' N! e7 v# T0 p' |) A4 G* N7 y
%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中. Z$ d. j3 q( B  C1 B1 c% Y
9 s# u  a- Q& c7 z5 I
function [sum,sub,mul,div] = operation(a,b);
$ @* x' {  H) a% _6 _/ _/ M4 b, \/ O. Y% _: I( M! x
sum = a + b;
7 x: \* _7 o4 a7 d. Z% @! g+ E; ]$ N! _& ]8 p! ~: e8 S: J2 d
sub = a - b;
+ ?$ J- l9 R# _5 [8 |/ c
& F9 `3 R% @# l* g  }% ?mul = a * b;5 J& y; m1 F, h
& r+ V# J  F. m5 t+ u  q
div = a / b;
1 r# e5 B0 {: a5 h! G
8 _7 w* m& i# A9 u9 [* R5 U0 c+ {end" N- a0 ]& U% E
! J; V8 y4 c$ I5 i( ~/ d

" E, }3 a" T; E* e
0 Y  e, J' A4 N# l$ U% Q9 b  DPS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。
% Q2 ~$ N, o1 U* U) B* S$ Y, N; b3 _, w: K7 G6 g
8 W+ E  T4 F! C& T7 Y

) K3 \3 g" O. c- D8 {  S* g; X三、使用matlab编译生成jar! d: v# _. ~1 |1 c, u
在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,
' ]/ l9 m+ g/ l& h# e5 ~4 d! J+ h/ _3 x
然后点击,file,选择new-deployment project,
/ {# }) Z" V% S' c2 c
6 `! L+ t* v0 Y" H- Q: x  g然后选择matlab builder jave。
  K% @8 J& X8 s' T: X0 s( |. s1 v7 f  w$ f2 v
name的地方填写工程名,. C; }" L* ]3 l1 v( F& ^+ G

% @) ?. v! n8 K( \+ rocation填写该工程的存储位置。
) a9 s' n) N7 Z& v; U  e6 C  k" @# K
点击ok。( e1 u- P+ v4 B! d7 c9 r6 b, a2 f( _

- \. V2 R  e, B  I8 ?7 q然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
! f* m5 Q' X. @, U$ ^- e, V  V% i3 f3 {
四、在java中使用matlab的函数
/ @" N% M& m6 @! t1 G% W; O6 O$ n现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。+ o& L, C1 H0 J! T
然后你可以清晰的看到XXX.jar中包含的函数和类! O! u( |# G. C0 s, J" R/ A
( z0 ~1 ?  s  L3 V! I
[java] view plaincopy
6 Q- R( n1 ~8 A( I5 Kimport com.mathworks.toolbox.javabuilder.MWException;  8 V; A, y3 Z6 V. T& l; _! J
import com.mathworks.toolbox.javabuilder.MWNumericArray;  
1 D. e, }7 ~( K: y1 v3 i9 ~import XXX.XXXX;  
, I# q8 Z# X+ ]. V3 jclass Test {  
* P+ A/ ]8 v: j* K    public static void main(String[] args) {  ! w2 \% t0 C; _* Q- K8 S
        try {  
* x7 o/ R& L% a( I8 c5 U; [            XXXX abc=new XXXX();  7 c2 R+ a' U2 @4 Y) I& s1 P. a
                          + B. |4 p) |( ?
            Object[] result = null; /* Stores the result */  
8 u4 q$ W! I' |, k* ~            int a=10, b=2;  
8 w% S! P$ B8 X7 Y: ^* E  ]            result=abc.operation(4, a, b );  9 z$ v7 B& y( Z" N$ A/ b
  
. h8 L5 h$ ?6 w9 ^7 |            System.out.println(result[0].toString());  $ x, i4 p* C9 m- z( }
            System.out.println(result[1].toString());  
' n2 z3 m9 L  T& P: g$ q            System.out.println(result[2].toString());  , l+ c( k6 s/ D5 r/ b
            System.out.println();  ( l" e9 D3 b% P3 b7 n9 o& k
        } catch (MWException e1) {  
7 t# P6 A& P! d9 G9 n            // TODO Auto-generated catch block   
1 E9 g- Q* F; p8 g4 y% o            e1.printStackTrace();  
1 m3 e4 e! h2 N# x  h; Q        } finally {  3 R8 ]$ L* U+ F8 D3 l$ y0 s
            /* Free native resources */  ' U# D+ b" z/ O5 c" a) ?; D
            System.gc();  
4 C' O3 V3 c# T, |8 l        }  ' v7 @! ^" T* R) T
    }  1 L$ f" y: c6 B" T2 i
import com.mathworks.toolbox.javabuilder.MWException;
! `9 D2 J. K0 ^9 aimport com.mathworks.toolbox.javabuilder.MWNumericArray;
: p$ C; I: ?3 w& c7 Zimport XXX.XXXX;
3 s- \% A/ ~9 f" ~  j; ]class Test {
$ v; A% f* O/ E  F4 |4 i  e        public static void main(String[] args) {8 k. c6 Q  |# ?9 R  V8 l4 i) P% q
                try {9 x! ~& R: g( ?( {* T$ Z9 ?" z
                        XXXX abc=new XXXX();
  C% y* `: K- W" J1 X  m                                                
. v  Z+ U. {; O$ G$ i( ?+ x                        Object[] result = null; /* Stores the result */+ c2 f* f- u! Z! M
                        int a=10, b=2;
, C3 a7 J8 R& a( u                        result=abc.operation(4, a, b );. Z7 z( c6 r- x1 {& P2 k

8 l4 b4 b8 i' f5 K5 T                        System.out.println(result[0].toString());3 s3 B' w4 m2 ?5 B0 }) I
                        System.out.println(result[1].toString());& }6 r2 k* U7 ]4 t" `2 i; S
                        System.out.println(result[2].toString());$ S4 M" v8 h+ e) n% e$ c( ]/ \2 L
                        System.out.println();6 |9 X# Q; ], O
                } catch (MWException e1) {4 t" h# ?$ G0 A* E
                        // TODO Auto-generated catch block' |! J. T' J% e; _3 A: F; V' G
                        e1.printStackTrace();# q; c" T. ]- U9 V& G! ]
                } finally {
3 t* [- x- x# n& S8 M8 A$ Y3 I                        /* Free native resources */% @! U# O. Z# C
                        System.gc();
) n5 h% _- `4 P8 }                }
! @, C! `9 O. A4 R! ~        }
1 y& x+ t; v  N/ @& N5 H- B) A  J3 H! m$ H0 R6 E/ u2 Y9 [
如果result[0]返回的是一个数组,可以通过如下的方法解决" ^% L9 O4 Z4 r/ h$ @8 K% Q7 l+ `7 ^
MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);) n0 e+ D4 @" w0 x: Z2 u
. p# j$ q$ v5 Q5 {: x
MWNumericArray temp = (MWNumericArray)result[0]; 9 ~4 {! z2 c! v; W9 |& b7 I
, A: ?: G. g0 z; _/ C- i
float [][] weights=(float[][])temp.toFloatArray();  ^: j' e' h0 e) C8 O* N
3 ^4 |4 Z3 r6 b

8 _; H3 i2 z0 u% ~五、可能碰到的问题
1 B7 r9 A( D6 O7 t. sException in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.
& I# W0 a% w, ]: q7 y' q5 d, W 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.2 j2 W4 R+ I& s( r# D
The MCR version that this component is trying to use is: 7.13.* }5 p* H' e7 v7 Z" ?" X; C7 }+ n

/ C, x/ j' h- x- S6 H% a+ w( [3 j7 k
Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path, q" M5 k; \0 S6 S3 H  v
1 O, `& {( w" `1 c7 R
' c1 t% t  ?* G% x- A( q, I

" s9 s+ p  `* |+ V- `7 y- X原因是2009a要对应安装mclmcrrt7.10。在MATLAB安装目录下查找:\toolbox\compiler\deploy\win32,找到MCRInstaller.exe 安装,重启Eclipse即可。

该用户从未签到

2#
发表于 2020-4-30 13:58 | 只看该作者
Matlab函数的编写及java对该函数的调用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 14:26 , Processed in 0.171875 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表