技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

Wolfram EngineをVisualBasicで使う(3:グラフを表示してみる)

Wolfram EngineをVisualBasicで使う(3:グラフを表示してみる)

 

今回は、グラフを表示してみたい。

実際やってみたところ、簡単なものであればそれほど手間はかからないことが分かった。

 

前回のコードをそのまま流用します。

 

  1. レイアウトに「PictureBox」を追加します。画面の左下のテキストボックス「TextBox1」は今回は使わないので、端によけておきます。

    画像のエリアを配置
  2. コードを次のように書き換えます。

     

    Public Class Form1

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

     

            Dim ml As IKernelLink = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname 'C:\Program Files\Wolfram Research\Wolfram Engine\13.3\WolframKernel.exe'")

            ml.WaitAndDiscardAnswer()

     

            Dim result As Image = ml.EvaluateToImage(TextBox2.Text, 200, 200)

            PictureBox1.Image = result

     

        End Sub

    End Class

     

    Wolfram Kernelで画像を生成するときには、「EvaluateToImage()」を使います。出力はbyte[]になるので、VisualBasicでは「Image」として定義します。

    この「Image」を「PictureBox」の「Image」に代入すればいいです。

    200px x 200px で画像を出力することにします。

  3. 起動して、テキストボックスに

    Plot[Sin[x], {x, 0, 6 Pi}]

    と入力し、「Evaluate」をクリックします。

    画像の時には、表示間で少し時間がかかります。

    グラフが表示された
  4. グリッド線と凡例を入れてみます。

    まずは凡例を試します。入力フィールドのWolgram言語はこれ。

    Plot[Sin[x], {x, 0, 6 Pi}, PlotLegends->”Expressions”]

    凡例は対応していない模様。

    凡例は表示できない?
  5. デバッガで見てみると、それぞれの値は次のようになってます。「"Expressions”」のダブルクオートをエスケープすればうまくいくのかな、と思ったりしたのですが、いくつか試してみてもダメでした。。。方法を発見できたらまた書きます。

  6. 3次元のグラフもかけるのかな、ということで、

    Plot3D[Sin[x + y^2], {x, -3, 3}, {y, -2, 2}]

    を入力してみました。3次元でもいけるんですね。

    3次元の関数プロット

    上記の関数はWolframのドキュメントセンターのものを使いました。同じページにもっと複雑なものもあるので、ついでに結果を書いておきます。

     

    Plot3D[{x^2 + y^2, -x^2 - y^2}, {x, -2, 2}, {y, -2, 2}]



    Plot3D[Im[ArcSin[(x + I y)^4]], {x, -2, 2}, {y, -2, 2}]



ドキュメントセンターの画像とほぼ同じです。

なかなかうまくできてます。