《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 4885|回复: 4
收起左侧

[提问] java调用Matlab (R2012a) 函数但是无法显示图像(plot)?

[复制链接]
发表于 2012-8-18 18:02:30 | 显示全部楼层 |阅读模式
我在MATLAB里写了一个函数并编译成jar文件,导入Java项目后使用。这个函数只是一个简单测试用的matlab函数,接收输入并返回一个平均值,然后单独显示出一个z=x.^3+y.^3曲面图象。但这个曲面就是不显示啊  !怎么回事!??

  1. function ave=myaverage(x, N)
  2. sizex=size(x);
  3. sizeN=size(N);
  4. if sizex(2)~=sizeN(2)
  5.     disp('Error: x and N must have dimensions of the same number.')
  6. else
  7.     total=sum(N);
  8.     s=x.*N;   %????
  9.     ave=sum(s)/total;
  10. end
  11. [a,b]=meshgrid(-4:0.1:4,-5:0.1:5);
  12. plot3(a,b,a.^3+b.^3), grid on
  13. disp('This is a test of the function.')
复制代码
我使用Eclipse Indigo作为JavaIDE。以下是Java代码:

  1. import TestPrj.MyAverageClass;

  2. import com.MathWorks.toolbox.javabuilder.MWArray;
  3. import com.mathworks.toolbox.javabuilder.MWClassID;
  4. import com.mathworks.toolbox.javabuilder.MWException;
  5. import com.mathworks.toolbox.javabuilder.MWNumericArray;

  6. /**
  7. * @author Xiaoyu
  8. *
  9. */
  10. public class UseMatlab {

  11.     /**
  12.      * @param args
  13.      */
  14.     public static void main(String[] args) {
  15.         MWNumericArray a = null, b = null;
  16.         MyAverageClass mac = null;
  17.         try {
  18.             mac = new MyAverageClass();
  19.             a = new MWNumericArray(new int[] { 1, 2, 3 }, MWClassID.INT32);
  20.             b = new MWNumericArray(new int[] { 2, 3, 4 }, MWClassID.INT32);
  21.             Object[] cObject = mac.myaverage(1, a, b);

  22.             System.out.println(cObject[0].toString());
  23.             mac.waitForFigures();
  24.         } catch (MWException e) {
  25.             e.printStackTrace();
  26.         } finally {
  27.             MWArray.disposeArray(a);
  28.             MWArray.disposeArray(b);
  29.             b.dispose();
  30.             if (mac != null) {
  31.                 mac.dispose();
  32.             }
  33.         }

  34.     }
  35. }
复制代码
数学计算结果是返回了并且正确,但是为什么plot不行,而只显示了窗体,但没有曲面呢?我在matlab里直接运行时可以的。是不是2012a的问题啊   如果是的话我就弄个低版本算了  各位大神帮帮忙~
发表于 2012-9-10 12:52:54 | 显示全部楼层
共同关注这个问题 我也遇到了 只显示画框 不显示画的曲线
发表于 2012-9-10 12:53:35 | 显示全部楼层
我的matlab 2009b 版本不高 也有此问题
发表于 2012-10-25 21:26:49 | 显示全部楼层
现在问题解决了吗?
发表于 2013-9-16 15:31:03 | 显示全部楼层
我也碰到这个问题了,刚刚解决。我也是用的Matlab 2012a 64位版本,操作系统是Windows 7 64位专业版。Java开发用的是eclipse kepler 64位版本。JDK开始用的是jdk-7u40-windows-x64,结果碰到与你一样的问题。后来看了Matlab的文档介绍各种Matlab 2012a兼容和支持的编译器。
上面写着支持Java Development Kit (JDK) 1.6,所以我把jdk-7u40卸载了,安装了老版本的jdk-6u45-windows-x64,重新设置了Windows环境变量,JAVA_HOME,PATH。
JAVA_HOME="C:\Program Files\Java\jdk1.6.0_45"
PATH = "%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\MATLAB\R2012a\runtime\win64;C:\Program Files\MATLAB\R2012a\bin;C:\Program Files\MATLAB\MATLAB Compiler Runtime\v717\runtime\win64"
当然要正确运行还要安装MATLAB Component Runtime.
C:\Program Files\MATLAB\R2012a\toolbox\compiler\deploy\win64\MCRInstaller.exe
而且还要把C:\Program Files\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar包括在项目里面。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-11-26 06:03 , Processed in 0.053807 second(s), 13 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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