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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1 b" @6 {; e7 {/ ^5 g$ m
一、matlab版本必须支持java
+ q' N5 n( H( G$ @: V+ w在command 模式下面运行deploytool,如果支持该命令即可使用5 s' A- |* }8 v" s  W# ^' f+ W
2 @) x. S: ^0 f: q$ f0 Q
: F" I- b1 E! x' U
+ P6 a# I4 L7 A5 w' r
二、matlab中function的书写" o, V- m; P' T3 k

' P5 C- U5 g, [  O+ H& r+ v, ]%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果: q, @. b7 A, I5 W. ~
5 b" X" e2 a: g- {" _5 B  @. d* ]
%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中
! G& n8 ]7 {7 d7 J# q, P7 x, C: U- `4 c* ?) T
function [sum,sub,mul,div] = operation(a,b);
- {9 X+ h+ y+ C5 U! b2 ^) k8 P  [, s$ [% _" S: p/ y$ a0 C7 W; V3 o
sum = a + b;
$ l. J/ C; G, \; H. T9 s2 @$ t1 I0 _' j% z  U: Y' t/ x
sub = a - b;4 A8 {* L2 K6 u# l4 ]

+ ~' e. u6 M5 J0 `mul = a * b;0 x8 Y$ h& p  ?- D2 G1 M( i
7 O6 ]% Y: [6 G$ o4 U" K$ m0 o0 |
div = a / b;
1 B" e) A+ f5 w3 i' g( Q9 f8 r+ g
end- A) Q0 v! x) }/ d: Y2 [

; x) ^7 k9 R, k9 m; g: _: [2 E
# J6 \" V0 u& k, [
% Y1 l$ U% @- x0 mPS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。/ ?6 Q9 d) b$ R- c* S

7 X1 r! b4 a( @5 h! w) F/ e* J9 Z; }* Y8 h# J

8 O0 O3 C& m  O- W/ l. e1 \三、使用matlab编译生成jar
  u" p, d6 {/ f% D在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,1 S; g( N3 {+ s: T" Y2 J

4 q9 K# P: K  a0 D. h/ C然后点击,file,选择new-deployment project,
3 A0 a1 R; T* c( x8 D6 [, ?$ A& `- Z- Q3 Z" h0 \  P! W
然后选择matlab builder jave。
) r1 l; ^1 ?/ }0 C
( i; e! J# o9 \2 D5 J% pname的地方填写工程名,3 O, Z7 X( s' D. K0 M

3 K8 q& W: M* w+ \* P* j$ jocation填写该工程的存储位置。
8 _! ]. l! M3 b7 w0 }5 t, R4 I2 t+ ?* `, S
点击ok。
% ?" q, ~0 K9 P1 J  U/ M. R. i3 a2 \5 d8 ]4 {7 z! x3 [' H5 F  A# L$ s
然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
5 X9 m# S+ H7 P- {3 R$ k3 M
) b# m1 u$ X& J' @5 k1 B四、在java中使用matlab的函数$ B, D( P9 `1 e- m: L
现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。
) B" E7 {* j! t' ~3 P7 E  L; T然后你可以清晰的看到XXX.jar中包含的函数和类
& t9 ^  A) W9 Q1 v. X+ E5 s
; {& P( F5 l2 W" Y: b[java] view plaincopy
) b/ Y7 {" u0 eimport com.mathworks.toolbox.javabuilder.MWException;  
; w- m" T/ _- kimport com.mathworks.toolbox.javabuilder.MWNumericArray;  3 a( Z8 W; r6 ?6 l
import XXX.XXXX;  
8 h% Z( g* G% j+ |class Test {  
3 B- R' e" u- w" z    public static void main(String[] args) {  / Y: i" x# H& X2 q' m9 m  t
        try {  / ~' G' g$ x& `/ J
            XXXX abc=new XXXX();  9 i# U7 f8 [  w5 O
                          
* E1 _* G9 {* j( Z  W. o            Object[] result = null; /* Stores the result */  
' J- Y8 ]: u. U: A4 k            int a=10, b=2;  
5 H' f' v$ b7 O0 `2 i            result=abc.operation(4, a, b );  1 `, [- Y( q" P$ ]
  * E. v% z/ [! I- E
            System.out.println(result[0].toString());  & b1 `4 P. n9 Y  }
            System.out.println(result[1].toString());  + \, X! b9 `; j* q! |
            System.out.println(result[2].toString());  " v# l) {# s! G5 U4 o( I. |
            System.out.println();  $ w% i9 }5 W, r5 w/ t
        } catch (MWException e1) {  
" o1 ?% g1 U7 d5 k            // TODO Auto-generated catch block   3 j! x0 M1 N# J5 I0 |9 d
            e1.printStackTrace();  9 c' q5 c1 y$ a5 H/ M: T9 j
        } finally {  ) i. V% k/ B. c0 Y( q
            /* Free native resources */  
+ Z" D8 |9 t- h            System.gc();  
# \( c+ |( N7 b- I# H        }  " X$ C2 K5 I/ n: f
    }  & b  f0 ~" D7 j  P, w
import com.mathworks.toolbox.javabuilder.MWException;/ U5 `+ M! ?/ d
import com.mathworks.toolbox.javabuilder.MWNumericArray;
2 E) ]4 _- p# W% J8 Oimport XXX.XXXX;7 c9 I7 u" n# M. t* ]  Q% F
class Test {3 z4 B' U) ^7 B* h% F. z
        public static void main(String[] args) {
' c% E0 G6 Q% b. n/ x( R+ g) i- Q                try {( W; W4 g  x1 G7 h
                        XXXX abc=new XXXX();% @! x* [% {& o# c5 U% i
                                                ( ?3 y4 d2 q4 v- E& k* B0 _
                        Object[] result = null; /* Stores the result */
- N" q% A3 e' J' e: C8 Z4 W                        int a=10, b=2;( `) s' \% k# y, ]/ `' L
                        result=abc.operation(4, a, b );0 }+ H, O# P# Q' P  G
' C- \: ~; o( x0 W" c) x0 D: B& F, R
                        System.out.println(result[0].toString());
2 u$ ]4 `1 |7 j( l. ^                        System.out.println(result[1].toString());& [. I9 d  [& o' q/ Y/ J% B4 s9 V
                        System.out.println(result[2].toString());
+ N" a4 i8 n2 R: x& R* T, `: \. t                        System.out.println();, ?8 ^3 p, H+ l3 @* E
                } catch (MWException e1) {
; P1 K- `. f/ Z& [& o9 V                        // TODO Auto-generated catch block2 T; {: w! k5 h8 Y
                        e1.printStackTrace();
3 [, ^6 s; x! D, D0 k) `  W0 i                } finally {
" v( a) ~( I, {+ Z% b8 s# A' v. j                        /* Free native resources */
6 M9 d8 `. s6 K* g. }/ Q                        System.gc();
9 |$ \) u' y$ y0 A& l& j; _9 C, h                }! }  J/ z" \  x
        }
# x5 |9 D7 p0 c( w
$ |. p6 j7 c3 J7 |+ M如果result[0]返回的是一个数组,可以通过如下的方法解决1 h" R! @& j2 B* m
MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);
# n2 v/ S- s! E4 z: f9 k: z+ F0 p' ^1 E1 _
MWNumericArray temp = (MWNumericArray)result[0]; + K; g3 p- _8 k6 x/ X3 _5 P

) L" V+ i( j$ A; Mfloat [][] weights=(float[][])temp.toFloatArray();
6 ?- z( D" @3 p- ?, u& e, c/ r/ b3 |8 H
* q5 U2 }: l  w9 ?4 x# q; H5 k
五、可能碰到的问题
+ _/ t: L5 B. i+ |0 D8 X& z! U4 ^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! Y0 l. O$ n) B/ r/ u' \/ T  Q 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.
, I! l! d$ A+ fThe MCR version that this component is trying to use is: 7.13.' H, D2 x: b9 s
5 s& m' U. z( k1 n' W

3 I* p: E' R/ L1 F0 F* w) f+ [Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path) z. _" g5 c. _# U+ G

$ {$ V# a9 r3 `& p
( S0 H2 Z! s0 W
) h8 v% [* @9 d* ?- B: ]/ l: 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-11-24 08:19 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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