首页 文章

从Mathematica到Java的图像

提问于
浏览
3

我试图从Mathematica中获取一张图片 . 我尝试评估一些使用包中的方法生成图形的Mathematica代码 . 如果我将代码粘贴到Mathematica Notebook,则会正确生成图形 .

所以我的问题:

如何将这些图形转换为Java ???

这是我的示例代码:

ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'F:\\APPS\\Wolfram
Research\\Mathematica\\7.0\\mathkernel.exe'");

ml.addPacketListener(new MyPacketListener());
ml.discardAnswer();
PacketListener stdoutPrinter = new PacketPrinter(System.out);
ml.addPacketListener(stdoutPrinter);
// In stringList there is all the INPUT for Mathematica
for (int i = 0; stringList.size() > i; i++) 
{
  System.out.println("Input" + "[" + i + "]" + stringList.get(i));
  ml.evaluate(stringList.get(i));
  ml.discardAnswer();   
 }
ml.close();



class MyPacketListener implements PacketListener {
public boolean packetArrived(PacketArrivedEvent evt)
        throws MathLinkException {
    if (evt.getPktType() == MathLink.TEXTPKT) {
        KernelLink ml = (KernelLink) evt.getSource();
        System.out.println(ml.getString());
    }
    return true;
 }

输出是:

<<CIP`ExperimentalData`
<<CIP`MLR`
dataSet = CIP`ExperimentalData`GetQSPRDataSet02[];
CIP`Graphics`ShowDataSetInfo[{"IoPairs", "InputComponents", "OutputComponents"},  
    dataSet];
Number of IO pairs = 2169


Number of input components = 130

Number of output components = 1

mlrInfo = CIP`MLR`FitMlr[dataSet];
mlrInfoInInputForm = InputForm[mlrInfo];
pointSize = 0.025;
CIP`MLR`ShowMlrSingleRegression[{"ModelVsDataPlot", "CorrelationCoefficient"}, 
  dataSet, mlrInfo, GraphicsOptionPointSize -> pointSize];

(*-Graphics-*)
(*
Out 1 : Correlation coefficient = 0.999373
*)
pointSize = 0.01;
CIP`MLR`ShowMlrSingleRegression[{"AbsoluteSortedResidualsPlot", 
   "AbsoluteResidualsStatistics", "RMSE"}, 
   dataSet, mlrInfo, GraphicsOptionPointSize -> pointSize];

(*-Graphics-

Definition of 'Residual (absolute)': Data - Model

                                                                        -1
Out 1 : Residual (absolute): Mean/Median/Maximum Value = 1.4 / 9.84 × 10   / 

             1
>   1.79 × 10

Root mean squared error (RMSE) = 2.063

*)

我如何获得这些-Graphics-?

谢谢您的帮助!

4 回答

  • 1

    J / Link用户指南有很好的代码示例,用于将图形从Mathematica发送到Java:http://reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html#29556

  • 4

    你为什么不把它_8236977_这个文件然后你可以在你的Java程序中读回来?格式为:

    Export["filename.gif",yourPicture]
    

    除了.gif之外,其他各种格式(.png,jpg,.eps,.tif)也是可能的 .

    Edit

    我似乎能够产生你声称在第二个代码块中显示的输出 . 第二个块看起来像交互式Mathematica会话的输出,对吧?在此会话中,输入和输出是混合的 . 我想如果你将第二个块的输入部分放在Java程序中的变量 stringList 中,你将从Java程序中生成输出 .

    如果你可以将赋值更改为stringList以使用 Export 到文件,那么你应该能够通过Java程序中的绕道来获取图形 .

    Update
    下载包并使用您的示例后,似乎ShowMlrSingleRegression输出的数字是一种副作用,就像在 Do 循环中使用 Print 时所发生的那样 . 它不是函数的实际输出,因此无法引用它或将其赋值给变量 . 这使得 Export 解决方法和其他任何实际上相当困难 . 很明显,这个软件包的设计并没有考虑到JavaLink的使用 .

  • 2

    告诉Mathematica将图像保存到磁盘上的文件中 . 可以通过File.createTempFile(...)首先在Java中生成所述文件的名称 .

  • 0

    你必须找到一个库来解释java中的mathematica并从mathematica输出中绘制一些图片,或者,如果它不存在,则创建自己的图片 .

    也许你可以查一下this library ...

    此致,Stéphane

相关问题