Изображение из Mathematica в Java - PullRequest
3 голосов
/ 16 июня 2011

Я пытаюсь получить изображение из Mathematica. Я пытаюсь оценить код Mathematica, который использует методы в пакетах для генерации графики. Если я вставлю Код в Блокнот Mathematica, Графика будет сгенерирована правильно.

Итак, мой вопрос:

Как мне получить эту графику на 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 ]

4 голосов
/ 17 июня 2011

В руководстве пользователя J / Link есть хорошие примеры кода для отправки графики из Mathematica в Java: http://reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html#29556

2 голосов
/ 16 июня 2011

Почему бы вам не Export передать его в файл, который вы затем можете прочитать обратно в своей программе Java? Формат:

Export["filename.gif",yourPicture]

Вместо .gif возможны и другие форматы (.png, jpg, .eps, .tif).

Редактировать

Я не пользователь Java, но код, который вы показываете в первом блоке, кажется, не в состоянии произвести вывод, который, как вы утверждаете, показан во втором блоке кода. Второй блок выглядит как результат интерактивного сеанса Mathematica, верно? В этом сеансе вход и выход смешаны. Я предполагаю, что если вы поместите входную часть второго блока в переменную stringList в программе Java, вы сгенерируете вывод из программы Java.

Если вы можете изменить присвоение stringList для использования Export для файла, то вы сможете получить графику через этот обход в вашей Java-программе.

Обновление
После загрузки пакета и работы с вашим примером, кажется, что выводимый ShowMlrSingleRegression рисунок создается как своего рода побочный эффект, например, что происходит, когда вы используете Print в цикле Do. Это не фактический вывод функции, поэтому нельзя ссылаться на него или назначать его переменной. Это делает обходной путь Export и любой другой на самом деле довольно трудным. Очевидно, что этот пакет не был разработан с учетом использования JavaLink.

1 голос
/ 16 июня 2011

Скажите Mathematica, чтобы сохранить изображение в файл на диске.Имя указанного файла может быть сначала сгенерировано в Java с помощью File.createTempFile (...) .

0 голосов
/ 16 июня 2011

Вы должны найти библиотеку, которая будет интерпретировать mathematica в java и нарисовать какую-нибудь картинку из вывода mathematica, или, если она не существует, создать свою собственную.

Может быть, вы могли бы проверить эту библиотеку ...

С уважением, Stéphane

...