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

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

Wolfram EngineをVisualBasicで使う(4:入力により結果を数字とグラフで切り替える)

Wolfram EngineをVisualBasicで使う(4:入力により結果を数字とグラフで切り替える)

 

前回までは、数式の場合は数式だけ、グラフの場合はグラフだけ、だったので、今日は自動で切り替えられるようにしました。

あと、何回も実行すると前のものが残るので、クリアボタンを付けました。

 

  1. デザインエディターでラベルやボックスを下のように調節して、新しいボタン「Clear result」を追加しました。

    デザイン変更とボタンの追加
  2. まずは、「Evaluate」ボタンの動きを変えます。If文でテキストボックスの文字列が「Plot」が含まれるかどうかで、数式(文字)として出力するか、グラフ(画像)として出力するかを分岐します。文字だった場合は、文字列としてテキストボックスに出力し、グラフだった場合には画像ボックスにグラフを出力します。

     

    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 strarg As String = TextBox2.Text

        If strarg Like "*Plot*" Then

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

            PictureBox1.Image = result

        Else

            Dim result As String = ml.EvaluateToOutputForm(strarg, 0)

            TextBox1.Text = result

        End If

    End Sub

  3. 次に「Clear result」ボタンの動きです。テキストボックス2つと画像ボックス1つの内容を消します。

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        TextBox1.Text = Nothing

        TextBox2.Text = Nothing

        PictureBox1.Image = Nothing

    End Sub

  4. さて実行してみます。

  5. まずは数式。

    Expand[(x + 3)(x + 2)]

    とすると、結果は次の通り、正解。

    数式の処理
  6. 「Clear result」をクリックすると、入力と出力がクリアされます。
  7. 次はグラフ。Wolframのドキュメントセンターから次をピックアップしました。

    ContourPlot[Cos[x] + Cos[y], {x, 0, 4 Pi}, {y, 0, 4 Pi}]

    その結果は、

    グラフの描画

 

いい感じに動きました。もちろん、これも「Clear result」でクリアできます。

 

しかしこれには問題が、、、

Graphics3D[Sphere[{0, 0, 0}]]

は、球体のグラフィックスを変えるものです。これには「Plot」という文字がないので、その結果は、

Sphere3Dの場合

この対応は次回。

短いですが、今日はここまで。