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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
  c' l6 Y( X; U
一、matlab版本必须支持java
7 F- g2 X5 [! r: ]/ q在command 模式下面运行deploytool,如果支持该命令即可使用
% ~: }1 t# d7 x* U
% b: [/ C% K/ {, T& {& h! ~* ], y, z- j3 W% {/ f$ f2 h

, E& Q+ U: R! c) @, ]二、matlab中function的书写0 i5 \0 _' ^7 _  S& A5 n( B; j

- b1 u" i- I0 L/ c4 x%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果( [. F5 I3 v  d+ K
0 c6 o0 T( _: i. R
%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中& j! `' h, P$ N  L' J' `8 G" G
! O( T( p0 I9 a' D$ V
function [sum,sub,mul,div] = operation(a,b);/ `& l0 g) G+ r, }  ~; Q% g
5 f5 x3 @5 E# A+ z' }) a$ L
sum = a + b;
/ r. w% U( Z! \5 m: Y5 ]/ J! j1 [# M. G% Q! b+ P. L
sub = a - b;
3 L' m$ j- k2 S; U
) v+ S! R4 c1 N1 d& V6 t! o: g' Gmul = a * b;* S& E1 f* P% Z4 F% l, z0 f
" l' c' |, h8 ?
div = a / b;: _6 q  V& B" \) b- I
1 s# Q7 q- Z9 {
end
" p$ |1 P; o7 C3 }2 W/ l$ d5 r& Y7 G* o) O6 o8 J8 d* z* g8 p" J+ Y6 V

5 A) u0 ~! ^$ h! t4 B8 t# V) `7 r! C6 Y4 S8 r3 L- n" l8 V( [
PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。7 c7 G) k' l0 d( `' W
0 J+ B& G; B: |8 j! L

# {: y. |9 O2 |9 L# Y4 t
; W* L( L' B" R3 X& y" P三、使用matlab编译生成jar& L/ k& j2 u* Y% C
在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,4 d- \$ _+ k1 ^; V# ~+ R0 A
: @5 M% W$ i4 Q
然后点击,file,选择new-deployment project,
6 X/ h: Y" ]9 K5 f0 I" c6 ?. I) M
+ V, C3 G7 |& _$ r然后选择matlab builder jave。- s$ K- s. P* m# {8 h: ]8 `
* g0 {6 s; M# |  d) Z# {( e
name的地方填写工程名,* k, b/ D! _9 z. |) K9 k: }* Z

( V# v9 y1 p# b9 v7 ~; pocation填写该工程的存储位置。
" g* u' D- h2 {* S, B" O* ]; E, F$ P. G! ^# w* g# B
点击ok。4 M; o, G- ]/ C: ]
4 G' c7 B5 o5 b  w, b8 N  |" ^& n
然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。
7 U0 o% U" b6 [7 @+ ]3 Z1 {. f% o
四、在java中使用matlab的函数
. x% ]7 W+ I- }4 M) N" X" r现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。6 }1 L4 V" O$ n8 U' k
然后你可以清晰的看到XXX.jar中包含的函数和类* [* k2 o3 E5 [
: F# `5 R1 v" j4 {& O( t& t
[java] view plaincopy5 K# D7 P8 c2 q9 R
import com.mathworks.toolbox.javabuilder.MWException;  
  |8 L, i5 n7 j% g) Gimport com.mathworks.toolbox.javabuilder.MWNumericArray;  1 B. ^- m2 l' `3 N
import XXX.XXXX;  6 k% g6 T6 b3 i
class Test {  
5 o+ d5 P( ^6 o2 A/ t- y* @" E    public static void main(String[] args) {  5 W+ O2 k* ?8 [8 O
        try {  
: h( V3 \7 q' g: U$ j! O. [0 p/ y- F            XXXX abc=new XXXX();  + @! u3 Y+ J% Y" m# K
                          + B/ Y% Z/ N9 D1 S8 l
            Object[] result = null; /* Stores the result */  
. j; V2 c9 P. s6 b( t            int a=10, b=2;  
! l% z6 f6 r$ e* X0 R+ L4 Y            result=abc.operation(4, a, b );  4 ]' I9 i+ R$ U- e2 z- M
  
+ w% H" J' i) c6 ?: A            System.out.println(result[0].toString());  
) @- X! G+ V/ u- {# g            System.out.println(result[1].toString());  
9 c. c; v) E! Q) J# h            System.out.println(result[2].toString());  
1 h8 e$ t' D2 Y5 s' P            System.out.println();  / t8 T( Z+ p5 a! ^1 v* l
        } catch (MWException e1) {  
- T6 b1 L3 g' l            // TODO Auto-generated catch block   
( g" ]( j# ?' e8 K' |9 c            e1.printStackTrace();  8 W' |9 ^3 h* T$ S; ~$ k, c
        } finally {  
: ~1 X8 [" t; }6 L* P3 C            /* Free native resources */  
& t5 x4 R4 F. r, M6 Z  u. [            System.gc();  $ k/ Z- h' u% E0 C2 H  u* J
        }  
+ t  D' O% [( c- ~. |    }  * {' Y6 g; i5 Z/ w' \3 Q
import com.mathworks.toolbox.javabuilder.MWException;
6 k; w9 m& Q) X0 B/ U3 k6 I6 Mimport com.mathworks.toolbox.javabuilder.MWNumericArray;
- C5 h& D! [7 F2 Oimport XXX.XXXX;
% L: E7 l+ B# f; r# v2 w! q9 iclass Test {) O. k! f, u0 I) c8 l
        public static void main(String[] args) {
7 O1 ]7 s& `  J9 `                try {
7 m" M3 B2 R% y/ e/ l                        XXXX abc=new XXXX();) j) j/ V* K3 V  x! s5 I/ R
                                                
% Z5 u8 P7 y& D* j4 ^/ K. x                        Object[] result = null; /* Stores the result */
- v2 ?1 w. X8 J8 M$ E                        int a=10, b=2;9 x8 ]9 A5 ]) d
                        result=abc.operation(4, a, b );
& j/ ?; g2 P8 d
+ @' m+ W9 b4 x. S7 J                        System.out.println(result[0].toString());1 @# B/ J$ |4 A; i
                        System.out.println(result[1].toString());0 `& x2 P' k4 ~+ _% T
                        System.out.println(result[2].toString());
; X) U* v! p! V* `                        System.out.println();
# E4 F" B2 {8 v/ H7 `                } catch (MWException e1) {
' e/ w+ m/ \- u& A/ T                        // TODO Auto-generated catch block
9 Y+ @6 s1 ?8 B. M                        e1.printStackTrace();! P1 V3 `* l( \0 ~' }
                } finally {& c7 |+ F4 X9 B* V9 k. l
                        /* Free native resources */
; [" `0 e, W- W! r9 _$ Y$ j                        System.gc();" b6 B& _/ G. r
                }7 V4 v" z7 h% @/ z( R; S8 [% X
        }
1 x6 n3 R8 F& A) m$ W0 P
: b6 L' a! G7 n+ j# G7 t; J) d如果result[0]返回的是一个数组,可以通过如下的方法解决% G3 v  l: j/ m& _! H) n( Y" K/ z
MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);9 R8 e6 x! u" \7 f! Z
( t  E& h, l, X
MWNumericArray temp = (MWNumericArray)result[0];
+ l' U! A! A; p% S. C# h0 j
( E* J% _4 d8 X2 P( ffloat [][] weights=(float[][])temp.toFloatArray();
' i$ t7 O5 a8 r  d+ T& V9 f7 M$ ]
0 n% p: I  i$ J& [  v1 |: Q- [0 i, M1 P2 f
五、可能碰到的问题
% A1 w# s( D; ]7 L, i& HException in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.
6 L' z& z. L; d& k/ \2 u 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.: B$ `) b# o3 }1 g0 \
The MCR version that this component is trying to use is: 7.13.
: G% V$ I! s& a1 d6 N( m/ v' Q3 C3 C! T; N+ l" m6 Y' w. V8 w

4 m' N7 h( n& m6 U3 \2 @Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path* }& k# w" Y6 M$ s6 K' J0 E
: o! i3 n' r- o/ E- Q2 ~! d0 O

, a, \8 W9 l: d& K3 v& ^# w: L7 F0 T# v8 A& B7 F( F: l
原因是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:37 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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