freevickie 发表于 2009-7-27 10:57

求助:java调用matlab(javabuilder)相关

jdk1.6+eclipse3.4.2+matlab2007a (matlab builder for java)
在java class中编写以下方法调用voldeno.m文件:
public void invokeMat(ArrayList<Double> alist){
                System.out.println("Begin:invokeMat");
                MWNumericArray x=null;
      Object[] y=null;
      oilvoldenoclass deno=null;
                int len=alist.size();
                System.out.println("oilinputdata length is"+len);
                double[] oilinput=new double;
                oiloutput=new double;
                for (int i = 0; i < oilinput.length; i++) {
                        oilinput=alist.get(i);
                }
                try {
                        System.out.println("Begin denoise");
                        x = new MWNumericArray(oilinput,MWClassID.DOUBLE);
                        System.out.println("MWNumericArray xis "+x);
                        System.out.println("output x is over!");
                        deno=new oilvoldenoclass();
                        y=deno.voldeno(1,x);
                        System.out.println("Object[] y length is "+y.length);
                        System.out.println("Object[] yis "+y);
                        System.out.println("output y is over!");
                        if(y.length==len){
                              for(int i=0;i<len;i++){
                                        oiloutput=((MWNumericArray)y).getDouble(i);
                              }
                        }else{
                              System.out.println("Invoke matlab function 'voldeno.m' error!");
                        }
                        
                }catch (Exception e){
                        System.out.println(e);
                }
                finally{
               /* Free native resources */
               MWArray.disposeArray(x);
               MWArray.disposeArray(y);
               if (deno!= null)
                  deno.dispose();
            }
                System.out.println("End:invokeMat");
               
      }

voldeno.m文件如下:
function out= voldeno(x)
%VOLDENO 函数对信号x去噪
% x原始信号,为离散电压的数组
% out为降噪信号,为离散电压的数组
% 画出原始信号
subplot(311), plot(x), axis();
title('原始信号');

% 对x使用sym8小波进行5层分解,得到高频系数。使用SURE阈值、软阈值进行降噪
lev = 5;
out = wden(x,'heursure','s','one',lev,'sym8');

subplot(313), plot(out), axis();
title('降噪信号 - heuristic SURE');

java 项目中添加了javabuilder.jar 和voldeno相关的jar包oilvoldeno.jar

运行时出现以下错误,请问为什么。
??? Undefined function or variable 'reporterrorlogs'.

Error in ==> matlabrc at 277

com.mathworks.toolbox.javabuilder.MWException: An error occurred while initializing the component.

freevickie 发表于 2009-7-27 11:52

好像是调用voldeno方法时出现错误:out = wden(x,'heursure','s','one',lev,'sym8');
我把out换成y,y= wden(x,'heursure','s','one',lev,'sym8');
报错:Index exceeds matrix dimensions.
其中x是1x166的数组,请问输出y是不是也是1x166类型的数组呢?
我测试了如果在matlab中直接在voldeno函数中输入数组x,该函数是可以运行的,而用java调用就出现错误。。。

freevickie 发表于 2009-7-30 10:18

上面的问题终于解决了。是matlab wavelet toolbox自带的wtbxmngr.m文件的问题。将文件替换成下面的文件即可
页: [1]
查看完整版本: 求助:java调用matlab(javabuilder)相关