2011-06-16 75 views
3

我試圖得到一個圖片從數學的。 我嘗試評估使用方法在包中生成圖形一些數學代碼。 如果我的代碼粘貼到一個Mathematica筆記本圖形正確生成。圖像從數學到Java

所以我的問題:

我如何獲得此圖形爲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-?

感謝您的幫助!

回答

0

你必須找到將在java的數學解釋,並從數學輸出畫一些畫,或者,如果它不存在,創建你自己的庫。

也許你可以檢查this library ...

問候, 斯特凡

+0

有產生從Mathematice圖片,進入Java中,這就像evaluateToImage()方法。但我的問題是,加載的包中的方法生成我的圖像,而不是Java方法。 – Jujo 2011-06-16 17:07:39

2

你爲什麼不Export到一個文件,然後可以讀回Java程序?格式是:

Export["filename.gif",yourPicture] 

而不是.gif,其他各種格式(.png,jpg,.eps,.tif)也是可能的。

編輯

我不是一個Java用戶,但你在第一塊顯示的代碼似乎並沒有能夠產生你聲稱輸出顯示在第二個代碼塊。第二塊看起來像Mathematica交互式會話的輸出,對嗎?在此會話中,輸入和輸出是混合的。我想,如果你把第二塊的輸入部分的變量stringList在Java程序中,你會從Java程序中生成的輸出。

如果您可以將指定更改爲stringList以將Export用於文件,那麼您應該能夠通過Java程序中的這個繞道獲取圖形。

更新
下載軟件包,並與你的榜樣工作後,似乎被ShowMlrSingleRegression輸出數字是作爲一種副作用,就像當你在一個Do循環使用Print會發生什麼。它不是函數的實際輸出,所以不能引用它或將它分配給一個變量。這使得Export解決方法和其他任何其他實際上相當困難。顯然,這個軟件包的設計並沒有考慮JavaLink的使用。

+0

這似乎是爲了解決我的問題。是否有可能保存任何Grahpics Mathematica會拋出?所以我不必知道,如果軟件包生成圖形或不? – Jujo 2011-06-16 17:11:12

+0

@Jujo mathematica可以將任何圖形保存到文件中(以多種格式)。評論中的第二個問題有點不清楚...... – acl 2011-06-16 17:39:36

+0

如何保存這些圖形,如果它們只是副作用? – Jujo 2011-06-17 07:21:56

1

告訴Mathematica將圖像保存到磁盤上的文件。所述文件的名稱可由File.createTempFile(...)以Java首先生成。

+0

因此,無法直接獲取這些圖像? – Jujo 2011-06-16 17:14:09

+0

該協議需要支持它。它沒有出現你正在使用的那個。 – 2011-06-16 17:22:35

4

殲/鏈接用戶指南具有的代碼很好的例子從發送圖形數學到Java: http://reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html#29556

+0

我試過這個用戶指南的東西,它不會工作。 – Jujo 2011-06-17 07:18:18

+1

@Jujo我也試過,它的工作原理!你使用哪個版本的* Mathematica *以及哪個平臺? – 2011-06-17 07:41:53

+1

我在x64 Windows 7機器上使用Mathematica 7版本。問題是,這些圖形不是實際的輸出,它們將通過cip包間接創建。所以如果有可能獲得這些圖形,告訴我;) – Jujo 2011-06-18 09:17:30