3

Mathematicaノートブックファイルを作成する典型的な「HelloWorld」プログラムを探しています。

私はこの作業プログラムを持っています。

 package graphica;

 import com.wolfram.jlink.*;

 /**
  *
  * @author Nilo
  */
public class MathematicaTester {

public static void main(String[] args) {

    KernelLink ml = null; 
    String jLinkDir = "C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\\SystemFiles\\Links\\JLink";
    System.setProperty("com.wolfram.jlink.libdir", jLinkDir);

    try { 
        ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\\MathKernel.exe'");

        ml.discardAnswer();
        String expr = "Sum[k^2,{k,1,11}]";
        ml.evaluate(expr);
        ml.waitForAnswer();
        String x = ml.getString();
        System.out.println("Result = " + x);

    } catch (MathLinkException e) { 
        System.out.println("Fatal error opening link: " + 
        e.getMessage()); 
        return; 
    }
}
}

これを実行すると、次の-expected-出力が得られます。

実行:
結果= 506
BUILD SUCCESSFUL(合計時間:2秒)

質問:

このプログラムを変更してMathematicaノートブックを作成したい。プログラムは(最終的に)mmaコマンド文字列の行の後に行を追加します。Mathematicaフロントエンドが同時に起動され、mmaコードがJavaプログラムからの要求によって評価されるといいでしょう。重要なのは、後でmmaフロントエンドで開くことができるノートブックの作成です。

4

3 に答える 3

6

フォーマットされたノートブックファイルを作成する方法を次に示します。

適切にフォーマットされた式でノートブックを作成する方法

カーネル呼び出しを使用してMathematicaコード(mathCommand)をボックスフォーマットすることができます。

String mathCommand = "Plot[Sin[x], {x, 0, 6}]";
mathCommand = "FullForm[ToBoxes[Defer[" + mathCommand + "]]]";
MathKernel kernel = new MathKernel();
kernel.Compute(mathCommand);
mathCommand = kernel.Result.ToString();

次に、そのようにカプセル化し、.nb拡張子を付けて保存します。

Notebook[{Cell[BoxData[
... ( inserted box-formatted output ) ...
], "Input"]
},
WindowSize->{615, 750},
WindowMargins->{{328, Automatic}, {Automatic, 76}},
StyleDefinitions->"Default.nb"
]
于 2011-11-07T16:17:05.270 に答える
3

Mathematicaノートブックは次のような構造のプレーンテキストファイルです

Notebook[{Cell[],Cell[]}]

テキストエディタで表示することにより、必要な構造を作成できます。.nbJavaにテキストファイルを作成させ、ファイル名を末尾に付けて保存し、コマンドラインバージョンのMathematicaを呼び出すことができると仮定すると、必要なことが実行可能になります。入力セルを初期化タイプに設定することをお勧めします。

于 2011-11-07T15:54:18.160 に答える
2

少し調べてみましたが、なんとか自分で答えることができました。

 package graphica;

 import com.wolfram.jlink.*;

 /**
  *
  * @author Nilo
  */
 public class MathematicaTester {

     public static void main(String[] args) {

         KernelLink ml = null; 
         String jLinkDir = "C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\    \SystemFiles\\Links\\JLink";
         System.setProperty("com.wolfram.jlink.libdir", jLinkDir);

         try { 
             ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\\MathKernel.exe'");
        //test-1
             ml.discardAnswer();
             String expr = "Sum[k,{k,1,11}]";
             ml.evaluate(expr);
             ml.waitForAnswer();
             String x = ml.getString();
             System.out.println("Result = " + x);
       //test-2
             expr = "UsingFrontEnd[nb=NotebookPut[Notebook[{Cell[\"Graphics3D[Cuboid[]]\", \"Input\"]}]]]";
             System.out.println("Result = " + ml.evaluateToOutputForm(expr, 40) );
             expr = "UsingFrontEnd[NotebookSave[nb,\"TERRANOVA1\"]]";
             System.out.println("Result = " + ml.evaluateToOutputForm(expr, 40) );

         } catch (MathLinkException e) { 
             System.out.println("Fatal error opening link: " + 
             e.getMessage()); 
             return; 
         }
     }
 }
于 2011-11-26T16:38:58.257 に答える