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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

7 ^0 ]- z' f! H& E6 R/ e1 P9 }一、matlab版本必须支持java: g( M; U1 x/ r
在command 模式下面运行deploytool,如果支持该命令即可使用5 x' ]/ L5 T! ?: L! r
- _" `. f, m% m; z  b! S2 |6 a
" D6 H' m. Y/ L& j
9 ?, A! ]7 m4 y) w
二、matlab中function的书写
: Z3 P$ @! u8 v) p( P: V5 w1 {) G# y& X2 w2 X% C
%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果3 I/ V* T' x3 K$ `

5 |! z5 T, w4 W4 ?$ ^, h& p- }& ^" X8 h%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中' d- q9 c! [, C) i: O9 v; \5 _) m
( H6 @0 b( Y% c$ g
function [sum,sub,mul,div] = operation(a,b);
- R$ P4 v8 u; w, Y
: Z3 y0 i4 ^+ n: i( R/ C7 v" H, rsum = a + b;
. y0 o% w  p; }7 I7 s  l
) }$ ^3 g5 v! P( v: nsub = a - b;
0 P/ v6 E( y  b0 @3 e- D- k, R" u7 t9 t# y
mul = a * b;( l4 e3 q' O6 X: S

, X2 K  h3 l- ]4 q$ _div = a / b;
7 H! `( x& l" q; d# e! |" `9 _# a& K
end
7 u9 \) @5 k' J8 Z8 c+ }
% o" O* N; i: m$ C6 Z9 O& S! h
9 B: e& v3 G: ~
- A. {% `! [. k9 W' |% C! n, }PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。
2 a& G! d- D2 z; q
, I: g5 F1 j8 n' B( v8 r5 [* N3 A* L8 e" W

6 U5 w  j; Y/ t# Y三、使用matlab编译生成jar) p3 r. s* I! R8 j. e  H
在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,9 i* }5 P) F3 y' b

* J) K( d, D" E4 c% O( d+ r然后点击,file,选择new-deployment project,$ p3 P7 E1 o4 g! `# s5 `2 h
$ m" ^, B3 Q$ W& n5 D
然后选择matlab builder jave。/ I7 Z1 v/ x1 W  S' i9 G; ?
9 s' `- D; X7 f
name的地方填写工程名,
# f' C  U+ ~+ [2 {- b+ c0 Y  q5 e$ O- f8 x/ P+ ^& D) l
ocation填写该工程的存储位置。
& Z3 F+ q: U; N5 X5 A+ a0 V0 M# ]8 }+ Y' d- v* ?3 V/ t
点击ok。
: s- V8 K$ P  h
; }# p8 I7 h" x& b然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
, V7 D8 O- }7 x+ P) P- i
0 R) Y7 k3 {! T! e四、在java中使用matlab的函数
+ [6 x; S3 L- v; q现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。
! K1 a4 p9 {) q" X3 k然后你可以清晰的看到XXX.jar中包含的函数和类4 I/ N1 S9 u/ b$ N3 L7 q# t
; v  h8 @- c" x
[java] view plaincopy; B2 H! U- L; q: u$ `$ a
import com.mathworks.toolbox.javabuilder.MWException;  
3 }5 l. c, ]1 [) e& gimport com.mathworks.toolbox.javabuilder.MWNumericArray;  % B7 c5 v1 z8 @4 C6 `% c
import XXX.XXXX;  5 t8 z8 j5 a. V# j
class Test {  / D: @1 U0 I( g/ c
    public static void main(String[] args) {  
6 E3 x# ~4 i) x0 w& y5 u2 u        try {  
0 \; i- w( k& z3 n" q            XXXX abc=new XXXX();  
% z$ M7 D) u% P; s3 T                          
5 G4 A7 V# w8 c) }5 Q            Object[] result = null; /* Stores the result */  
% ]( E" t. h- h% O( @            int a=10, b=2;  5 p- ]0 c# \# l8 Y) m# m0 \
            result=abc.operation(4, a, b );  
0 T5 }$ h9 O! Y6 l  ]' x  
2 n. F. A5 b# \            System.out.println(result[0].toString());  & |, M$ B  x  Z5 U0 n6 i
            System.out.println(result[1].toString());  + M; x" ]9 U- }: n1 O. o
            System.out.println(result[2].toString());  
$ Q0 M7 y, s% O1 y4 o/ n            System.out.println();  
% c( p6 o) t3 D/ }8 r& A# n2 ?        } catch (MWException e1) {  
) g0 b/ o& S0 s" }' y            // TODO Auto-generated catch block   " w" h' s5 ?, I5 a
            e1.printStackTrace();  " G  b1 G* w# T2 `4 I
        } finally {  % o) I: w! s! B% C
            /* Free native resources */  3 ?' w% I( G$ K' A& t( e
            System.gc();  
# z1 v" S  o0 ?7 d$ m5 f: \: Y: _        }  3 s. m3 _5 t  _) ?
    }  8 y0 e0 C/ V, j: e/ J4 h$ P8 n
import com.mathworks.toolbox.javabuilder.MWException;8 g  y; @% T. Q  D
import com.mathworks.toolbox.javabuilder.MWNumericArray;
% h2 M  r5 N7 x4 L# Himport XXX.XXXX;1 v5 u& R5 C( \
class Test {' f) M" Y0 E! a! p4 n4 b$ g/ u+ o
        public static void main(String[] args) {7 d6 a* ]0 ], B. G1 U
                try {
! ?& z& s# h& r3 t* |$ @+ ^                        XXXX abc=new XXXX();
& G6 ]  t* Y. w& g2 b8 M' L) [, O7 r                                                - z* _" U4 \0 b0 [! E0 x0 i8 V
                        Object[] result = null; /* Stores the result */
( ]+ w2 [0 X" |& w" n* H7 v. i                        int a=10, b=2;7 v" K& \4 k! `0 J9 ~  c& R0 J
                        result=abc.operation(4, a, b );
2 T9 m# z; Q# s5 j! b
5 G5 g0 ~9 v2 P                        System.out.println(result[0].toString());) D$ J& V) N9 q4 k' r6 _
                        System.out.println(result[1].toString());6 I$ [1 x* D0 O
                        System.out.println(result[2].toString());9 G' Z  M$ M- o$ _8 `  U+ `
                        System.out.println();- _, s2 _3 G5 i, t
                } catch (MWException e1) {
5 O) z, F3 M, ^3 ^9 L# K                        // TODO Auto-generated catch block/ K: B$ R' N( _% F( T( G
                        e1.printStackTrace();. r. W& u# H2 F$ ?- q( ~
                } finally {
+ [; Q0 z6 W; v! z& H1 Z                        /* Free native resources */: y  f7 @0 ?8 w$ l6 V  C/ @6 `; E
                        System.gc();8 ?( B# P' E7 }: }4 k
                }7 V: i: [: e- {, g  Y4 w
        }4 a# c1 Q) ]2 [: A3 `# `
' g; O. @. o7 t  E. ]2 d! K
如果result[0]返回的是一个数组,可以通过如下的方法解决
- o6 I! N, C# d, G* B7 }MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);  Q1 n7 F5 L/ ~  k% B- W. |" O# J

: `2 X& u8 ^8 o. p9 S3 k: AMWNumericArray temp = (MWNumericArray)result[0]; ' q& y. T; G; ~( q3 i  V

& z# s0 _+ _+ j4 J* gfloat [][] weights=(float[][])temp.toFloatArray();9 Z! g( U4 p7 F% }/ g

& z+ b; c1 g: l, [% `; u
+ O. W; ]2 U' ?' f* M: x9 k8 p五、可能碰到的问题
8 E% p2 }* @% y3 u8 B6 K5 N) bException in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.3 M9 }7 R. v9 C
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.
; U: x  {8 l9 o/ k; B0 g( d7 M: rThe MCR version that this component is trying to use is: 7.13.
1 h% ?% f/ f  `+ M3 Z# z' Q) P  [7 u+ B
, y& V$ p2 A, Y" W# i( p* w/ Q
Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path6 o. |, C  z, _; ^
2 c( o% d/ f* B6 q
" s' P& U* n' V

% W& @6 L% A& {* i% c# K- z原因是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 05:09 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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