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

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

Wolfram EngineをVisualBasicで使う(2:Wolfram言語の入力を受け付ける)

Wolfram EngineをVisualBasicで使う(2:Wolfram言語の入力を受け付ける)

 

前回は、式をハードコードして固定していましたが、今日は文字列を入力して、応答を表示するようにします。

とりあえず、前回の続きから始めます。

一応、「Release」->「Debug」に戻してから。

 

  1. まず「Run」ボタンのテキストを「Evaluate」に変えました。あと、結果表示の前に「Label」で「Result」を加えました。

    次に、新しいテキストボックスを「Evaluate」ボタンの上に配置しました。この上段のテキストボックスに入力したものを、評価して、結果を下に表示できるようにします。

    入力用の新しいテキストボックスを配置
  2. 「TextBox2」(上段のテキストボックス)の内容をWolfram Kernelに渡せるようにします。ほんの1か所を変えるだけです。

    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 String = ml.EvaluateToOutputForm(TextBox2.Text, 0)

            TextBox1.Text = result

        End Sub

    End Class

    ハードコードしていた部分を、「TextBox2」のテキスト、つまり入力値に変えただけです。

  3. Visual Studioツールバーの「WinFormsApp1」ボタンを押すか、F5キーでデバッグモードで実行します。すると、想定していたダイアログが表示されます。

  4. 上段のテキストボックスに「3+2」と入力し、「Evaluate」をクリックすると、きちんと計算されて表示されます。

    計算結果が表示された

    上段に入力した文字列をそのままWolfram Kernelに渡しているということは、Wolfram言語に基づいて書かれたコード(ただし出力はテキストでないといけない)を入れれば、そのまま動くのではと予想しました。

  5. ということで、Wolfram言語の因数分解「Factor」を使ってみます。

    上段のテキストボックスに、

    Factor[1 + 2 x + x^2]

    と入力してみました。

    その結果は、、、

    因数分解の結果

    ううむ、うまく表現できないのか。。。

    ただ、計算は正しくやってくれています。

     

    デバッガで、どのような文字列が「TextBox1.Text」に入ってきているかというと、

    「vbCrLf」という改行コードが入ってきていますね。2乗の「2」の前にスペースが入っているということは、2行で表現すればそれなりに見えるかも、と推察できます。

  6. ということで、2行が表示できるように「TextBox1」の「プロパティ」で「Multiline」を「True」にし、ボックスを少し大きくします。

  7. で、同じ因数分解をもう一度やってみると、その結果はこれ。

    2行で表示した結果

    うーん、おしい。

    おそらくこれは、フォントの関係で上の空白文字の幅が狭いのでしょう。フォントを等幅系にすれば、きっとうまくいくはず。

  8. 「TextBox1」の「プロパティ」の「Font」を「Courier New」にして実行してみると、それなりに見えました。

    フォントを変えて表示

    TeXっぽい表示はできないのかな。Wolfram言語では「TeXForm[]」という関数がありますが、VB側の画面があくまでもStringなので、そのままでは厳しい。

    これは、時間があれば、そのうち考えてみることします。

     

    もう一つ関数を試してみます。微分。

  9. 上段のテキストボックスに、

    D[x^n, x]

    と入力します。「Evaluate」をクリックすると、結果は次のようになります。

    これもよさそうですね。1行で表示したり、等幅ではないフォントだと「なんのこっちゃ」となるかもしれません。

 

今日はここまで。意外と簡単だったかも。