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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

$ N" J3 T6 m# O3 o一、matlab版本必须支持java
8 m/ A( m+ m7 ^/ K: |' b$ y在command 模式下面运行deploytool,如果支持该命令即可使用
2 \' L" ~. E5 ?& w1 @- `. H2 ^, R0 l) {8 F4 p; w
/ z( l" P% d- Z$ ?

1 Y1 |" n% A- G$ K* x/ u( X二、matlab中function的书写# t# |& f& V& a2 {8 d  g/ t

- m0 G6 j" R7 C6 W: V1 H( f%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果
# f2 s$ v' _: `1 n* b
4 ]6 b( r# z; }2 j, N%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中+ t% w; O3 c, r* X5 p( F

  _0 D3 P3 v1 R! h& G' |4 [function [sum,sub,mul,div] = operation(a,b);
# ]& ^4 H) d1 I$ A( ?. c1 ?- s. C
1 k9 ^, _: D0 t1 xsum = a + b;1 h# v1 s& N8 ~* t, P7 ?
# A. j+ J7 B" d- _; T
sub = a - b;
- t: H  }. g- h+ h3 O( v( W3 k+ i" H% Q
mul = a * b;- p( N! F/ j* K7 e( z

9 ]5 c% d1 R! [& p( G# B8 Z: Ddiv = a / b;: m6 [( j' K; X5 E% j; w
& v0 o8 |7 g- |$ R
end
) i* A/ W6 p/ \6 E+ p! h6 _( v/ _) D
# c3 |8 w. q0 }+ ~( d
0 D: V* y8 ~7 b: T
PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。, J# ^# l8 O* D( D

( _2 f. a% J9 q8 ~% R+ s  n  k' b, [
! A* n) }2 k& w! p" M) _
三、使用matlab编译生成jar
! ^9 ~9 \- E6 d' M在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,
. P; Y# i/ |% `6 ?* e1 w. D/ E, ?& ]
然后点击,file,选择new-deployment project,
8 c& _+ d. o: a; O  c. a
5 W1 E. B" H) z3 X然后选择matlab builder jave。
0 c1 C2 T& R+ N/ D% N# b7 {1 i) N' d" J6 I- \  }' [$ m, ?" N/ o& j  ?& U
name的地方填写工程名,5 C$ G* N6 {% m' ^% `3 o. |
" \7 v7 ]4 }# b1 @
ocation填写该工程的存储位置。) H, Y: A, L# E# c

; A: X8 a4 q6 T/ ?点击ok。6 g& {1 Q8 g8 a5 j, y

3 g. P5 k$ I, R* f4 c% P1 O然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
7 K' o" I$ z7 P  R; X3 n& m4 c
! S- p. q8 v" W6 P四、在java中使用matlab的函数
6 M* p) x* P( P$ {: N: G, J现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。$ X4 E; H% `# D$ t( a# j
然后你可以清晰的看到XXX.jar中包含的函数和类
& G# I$ T8 A' \* V: x6 F7 o& `2 Q. G# {" x3 v
[java] view plaincopy
! p2 g8 \2 U6 m0 f. l, |% nimport com.mathworks.toolbox.javabuilder.MWException;  
5 Q& C& r3 b& n7 v. |+ V* d$ @import com.mathworks.toolbox.javabuilder.MWNumericArray;  2 o- S+ B! d3 `  X4 w4 @# @) ]
import XXX.XXXX;  
' w% l) P! T+ V/ Zclass Test {  
( x8 s. B  e0 {6 Q    public static void main(String[] args) {  
1 I7 ]1 J1 H- |; ~% `0 e% H        try {  " m2 x5 i3 d; D  [5 ]. D" c; {
            XXXX abc=new XXXX();  9 {2 Z  o0 q5 u$ u2 c
                            P9 |/ ^5 g% [; q9 m
            Object[] result = null; /* Stores the result */  - B3 A" n' u6 f6 d. Z8 L
            int a=10, b=2;  " N! _$ _$ S( V( W( f
            result=abc.operation(4, a, b );  
1 b1 A& M8 b0 c: j  
# s" m6 p1 b1 `$ ]: ^% j            System.out.println(result[0].toString());  ) K0 }! S1 M& U+ O$ [
            System.out.println(result[1].toString());  3 M2 l+ l4 W9 c! h( X$ q5 _7 j
            System.out.println(result[2].toString());  
1 C. E# g' [+ N( Z2 F$ M            System.out.println();  
+ m1 j9 A) p' H, h9 B9 F' \9 [  K        } catch (MWException e1) {  
' a( z" S5 p: _- W; l% m7 t( t1 ]            // TODO Auto-generated catch block   
5 K# `+ \0 a6 k$ ~* ?. J' Z, q            e1.printStackTrace();  
8 g, ]+ Q! ]% R$ r: _2 A) v3 A5 y        } finally {  , |$ e/ [, F3 |
            /* Free native resources */  
( h: O7 i* C( W) p) L9 s7 G- p            System.gc();  . Q7 ~9 Y1 j4 ]8 l1 V; K! C, v+ Y
        }  / N- a- h8 _" m* x
    }  9 Z) L5 [% X$ N# \# E1 _; z
import com.mathworks.toolbox.javabuilder.MWException;
  d  f0 `$ |( k# A1 D# i, Eimport com.mathworks.toolbox.javabuilder.MWNumericArray;: o! ?" ?  O5 ?- V  ~2 p2 A
import XXX.XXXX;
( z) ~& l+ k( Qclass Test {( w8 N, M! b; `9 d5 @
        public static void main(String[] args) {. }- D' W8 W# m' P! v/ [
                try {
5 v9 e" b5 ]# i8 i( U$ `5 ]1 e3 F  `                        XXXX abc=new XXXX();& `" C) n" ?2 L( Y& i
                                                
4 e8 S; b9 V- i8 Q. G- N3 H9 ?$ ]  [: g                        Object[] result = null; /* Stores the result */
# ~6 J+ o. s* A9 i* m% Z, [& `                        int a=10, b=2;
. ]0 H- I9 e3 i  R) x                        result=abc.operation(4, a, b );
. o* O. V4 F- O 7 \. C" D6 Q) ?/ b, b4 f
                        System.out.println(result[0].toString());( Z, f6 L, I5 d8 A4 M! ~
                        System.out.println(result[1].toString());) ^! ^! [0 S) R% E1 d6 k' O0 U$ \
                        System.out.println(result[2].toString());5 M/ d- F6 u$ u. m
                        System.out.println();4 c  a+ w: h6 }( C  o
                } catch (MWException e1) {( ]6 g' D* S5 ?7 M( I
                        // TODO Auto-generated catch block, i7 l) D1 Z; D# a$ a; {. O
                        e1.printStackTrace();. R; {/ e" c  `- [* c" K. Y; b
                } finally {' S/ f! v! r3 T; }
                        /* Free native resources */! }- J& ?  w% `. b" @
                        System.gc();
/ q8 v7 c2 A/ N$ [- h7 }5 ~                }1 S7 u1 X5 [- {2 v# a! u, u9 y2 g
        }
( ]! z+ c" z$ K6 \3 A8 v$ }0 ~
4 a2 g6 ~* K7 @5 D如果result[0]返回的是一个数组,可以通过如下的方法解决
2 _! `9 l- u) @% }( t% M# WMWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);2 j- u- Z9 ^, Q. c2 K+ v6 K

1 e: r8 ]+ ]& n$ U7 A  [8 H/ EMWNumericArray temp = (MWNumericArray)result[0];
- c' N6 [# I( d: ?! a# C* q
/ f1 r2 h# O0 o( B3 S, b5 A* y* pfloat [][] weights=(float[][])temp.toFloatArray();
0 l) \0 x2 x/ S! g! S6 \5 ~4 |! |6 n
- @8 z) W# H9 ~: h$ T
五、可能碰到的问题% K$ A4 o' D5 L3 [
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.
  |* z% p. c! R8 Y 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.1 J2 S0 u7 s3 V; F4 \6 A
The MCR version that this component is trying to use is: 7.13.9 k7 H5 V  k0 x- b3 l8 v7 a6 G  f9 M

4 j' y* ^! P2 U* ^" G/ o; O8 V
$ ~2 l9 w- u* c, wFailed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path- V# @( u- d/ D
+ W# }$ z. u; C. {
1 l) @: E2 \7 J/ M# d0 d, {

4 K3 Y' j0 @  a; S, V( g2 d  z5 f原因是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-7-23 14:59 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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