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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 O) x3 S# e+ v一、matlab版本必须支持java0 b7 C* r+ ]6 f  B% m& ?4 q
在command 模式下面运行deploytool,如果支持该命令即可使用! s5 r" i0 W0 {
# @( y' N+ U% J5 Y

+ M+ h$ ^1 H% h. p/ E& h& D4 Q
" S/ T' x0 c* w* H二、matlab中function的书写
2 X0 i% \/ Z7 q3 ?/ S: D  A9 y, |5 V. b
%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果7 f1 V9 A9 l5 G. k2 B

. n9 @2 d& @+ l  h6 B%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中7 ], Z& `0 G' G: y

. ?# s9 ^4 n6 n, t3 m& C' j6 Tfunction [sum,sub,mul,div] = operation(a,b);: B$ c, m/ `( m9 D3 N: i, M
. E' r  L; ~) c: F
sum = a + b;, a/ ?+ `. `5 O! V( \. `
4 \; }7 [/ k( Z) T( I
sub = a - b;
# N1 c2 ~  A9 q# l# R9 h5 C  Z# l7 j. b6 ]
mul = a * b;+ x- Y: F! Q9 V8 q& j# V$ [" L$ z

! V2 Z9 o0 k: ?& Ldiv = a / b;; N6 z  V' Z( y2 P& X7 i
% r4 y& n( X" S, n- w$ Y3 l  }
end
' p/ U9 ?' m1 I5 M
: i$ \4 N* u4 J% S6 d# ]
% P! }- X. b- P7 c( t. e3 R4 {- j6 p, R/ n$ o
PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。- v1 T+ f" W+ C* D6 ]

4 k! f/ J% n% K+ u: [  ?1 }. C
5 V; w$ Q3 T2 U4 U0 g6 |) {
9 `' O  a; f# W; s* u三、使用matlab编译生成jar6 M& H8 j* }' A" S
在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,/ z! j' ~8 f! v7 }+ R) g+ o4 |8 F
: w5 }1 [' T5 G2 ]
然后点击,file,选择new-deployment project,* w3 Z# X/ v5 r
) T# j; {* c  o  n& Z' F1 {
然后选择matlab builder jave。: ?, D5 Z) Q0 Z6 h+ @  F3 j' M
: _* Q" x3 S- j9 g; {
name的地方填写工程名,
4 \) p& F6 A  S8 F3 A3 I) G1 p' m" i& a
ocation填写该工程的存储位置。
/ c) y1 \2 J: K- l; D3 {
! F# `; b* S# }) }2 a9 R" Q) D点击ok。
' I& p: B1 K- o7 W* ]
. n# P# B! x- x2 P' o) |  v% i然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
' U! `& }, V, A$ W7 A  I! B( |) s: \5 g1 R3 z7 W  F% F- i
四、在java中使用matlab的函数
- q4 h$ E. X9 X3 P% Q现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。1 `- k2 n& J, x9 [+ G5 v
然后你可以清晰的看到XXX.jar中包含的函数和类
8 W' Q! D5 M# |. ^/ C2 x: i
3 i" D; `/ ^, h3 U[java] view plaincopy
! A5 w1 h% L+ a' `8 ?; h5 ^import com.mathworks.toolbox.javabuilder.MWException;  
  W0 Y& g& b$ u) Y. Jimport com.mathworks.toolbox.javabuilder.MWNumericArray;  
, _# y3 v, P& \import XXX.XXXX;  
8 w( z& e: Y- d+ r4 `class Test {  
( a, H( I& ?1 y, e) Q4 z+ k6 W- E    public static void main(String[] args) {  
  b- }/ B; L" e5 `% G0 Z! v6 C        try {  & G9 A; ?: l5 Y! c( R8 _, k& \
            XXXX abc=new XXXX();  
7 t$ j: z7 t, P* `/ s3 e& D4 F                          % a* U9 J$ h$ v  N2 y
            Object[] result = null; /* Stores the result */  
- z3 ^; [) o0 c: a0 `4 A7 c            int a=10, b=2;  - Z9 G+ c& U, I3 Q6 w( W
            result=abc.operation(4, a, b );  4 L5 I( Q. n0 V! K5 I* w
  
/ t0 Z* S" Z! X2 h            System.out.println(result[0].toString());  8 P) \" w  C$ i1 L0 d7 A
            System.out.println(result[1].toString());  
2 a; y+ k$ D; }( M' o& s            System.out.println(result[2].toString());  
$ H+ k% q" ^" q( g4 M            System.out.println();  
: R7 T2 L: v9 z: r5 m        } catch (MWException e1) {  
$ m. O6 O6 k5 a9 L            // TODO Auto-generated catch block   
$ c7 j1 L8 D* G! H$ ?            e1.printStackTrace();  
) D$ Q* r* G0 A$ Q# h/ k: O        } finally {  
0 f; O0 q( O$ n% b% h            /* Free native resources */  
; x5 z* L% M& B0 _            System.gc();  2 A& I- R2 z9 f2 y; F2 j6 F# w* V
        }  
  x) y8 K! ~# l3 S1 O8 a    }  
0 v8 {# M" J: |5 p* [# e3 Z6 I4 Ximport com.mathworks.toolbox.javabuilder.MWException;3 P& [, g$ ~& S$ X" p
import com.mathworks.toolbox.javabuilder.MWNumericArray;
  U- o3 g% }: S  C5 {) e. |5 X, uimport XXX.XXXX;2 _, `8 L7 v4 L7 j
class Test {. H  [* R5 @  p& y: ]! o
        public static void main(String[] args) {' w6 r4 M/ g( `, f. t& u# o, M, ~4 V
                try {  c0 `9 Z; ?8 \; |' i
                        XXXX abc=new XXXX();
, N5 |  k$ \( W; J# w& s                                                ! _* w! {. u4 S3 j* H+ w3 w6 Y$ W
                        Object[] result = null; /* Stores the result */
) D) n7 E) m: a9 g1 I& E" }& d                        int a=10, b=2;' x2 B3 I% x( C' F0 ?# p/ T
                        result=abc.operation(4, a, b );- L+ r: o( y# u  V
% A" F5 p/ Y7 b# a! I/ l9 \
                        System.out.println(result[0].toString());" s3 X0 o% [' @8 h0 n5 S* B. Y
                        System.out.println(result[1].toString());
/ x' w2 s" d) ]( g                        System.out.println(result[2].toString());. }, m. m$ v( F& F8 P4 }
                        System.out.println();. k9 P! C& f6 B  t) Y
                } catch (MWException e1) {: j. `1 i8 b7 ~3 b
                        // TODO Auto-generated catch block5 I  H9 B3 |1 ^% L
                        e1.printStackTrace();( m% w1 r7 q/ @+ c# i
                } finally {" x% p0 ~; K6 _' U) s
                        /* Free native resources */2 {- Y. i0 ?) Z& q6 U" M7 E0 h% A
                        System.gc();% @9 d. |2 Y) P
                }
- [$ G# ~+ U% M, U) G( A        }
+ n6 \- B% a2 s# c3 P- S' |7 W& e
- e% X! O7 @1 L7 t6 @9 X7 ^9 [; q如果result[0]返回的是一个数组,可以通过如下的方法解决
! _2 A" m, l  i8 a0 ]  N; D5 w8 dMWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);
" [: U. Z  E6 ^% @) }' x* c# E+ a6 H' u+ N$ X2 ]4 n7 f$ g' {( F" Y6 r
MWNumericArray temp = (MWNumericArray)result[0];
- G! x' s; y# q" D! B. ]+ P
. O& {% i; G; `7 ]2 o# N# @float [][] weights=(float[][])temp.toFloatArray();
4 _4 v5 O( i2 r' z. i. W" Z/ y' ?2 M) `* ?  L2 ^& u3 }7 A$ S7 U
. }! j7 ^0 B5 W% q# z5 e9 k, B
五、可能碰到的问题
3 }/ I( K8 A' Z3 oException in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.
$ \; C. U3 T$ l4 `& R6 v 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.
, f6 {: s+ K" Y" K' qThe MCR version that this component is trying to use is: 7.13.# k. F4 H- P0 \7 T8 d# w
1 @! E. i' ^: f0 o- i3 w" P
8 X7 |  o0 C3 [# F* E( r
Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path. x  z' Y' g- n6 A( k
; `, `9 q& f' f: [9 p4 ]
4 Q4 E& t' n5 {2 {

0 {% b' R: B5 b# 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 02:28 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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