Wolfram EngineをVisualBasicで使う(2:Wolfram言語の入力を受け付ける)
前回は、式をハードコードして固定していましたが、今日は文字列を入力して、応答を表示するようにします。
とりあえず、前回の続きから始めます。
一応、「Release」->「Debug」に戻してから。
- まず「Run」ボタンのテキストを「Evaluate」に変えました。あと、結果表示の前に「Label」で「Result」を加えました。
次に、新しいテキストボックスを「Evaluate」ボタンの上に配置しました。この上段のテキストボックスに入力したものを、評価して、結果を下に表示できるようにします。
- 「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」のテキスト、つまり入力値に変えただけです。
-
Visual Studioツールバーの「WinFormsApp1」ボタンを押すか、F5キーでデバッグモードで実行します。すると、想定していたダイアログが表示されます。
-
上段のテキストボックスに「3+2」と入力し、「Evaluate」をクリックすると、きちんと計算されて表示されます。
上段に入力した文字列をそのままWolfram Kernelに渡しているということは、Wolfram言語に基づいて書かれたコード(ただし出力はテキストでないといけない)を入れれば、そのまま動くのではと予想しました。
-
ということで、Wolfram言語の因数分解「Factor」を使ってみます。
上段のテキストボックスに、
Factor[1 + 2 x + x^2]
と入力してみました。
その結果は、、、
ううむ、うまく表現できないのか。。。
ただ、計算は正しくやってくれています。
デバッガで、どのような文字列が「TextBox1.Text」に入ってきているかというと、
「vbCrLf」という改行コードが入ってきていますね。2乗の「2」の前にスペースが入っているということは、2行で表現すればそれなりに見えるかも、と推察できます。
-
ということで、2行が表示できるように「TextBox1」の「プロパティ」で「Multiline」を「True」にし、ボックスを少し大きくします。
-
で、同じ因数分解をもう一度やってみると、その結果はこれ。
うーん、おしい。
おそらくこれは、フォントの関係で上の空白文字の幅が狭いのでしょう。フォントを等幅系にすれば、きっとうまくいくはず。
- 「TextBox1」の「プロパティ」の「Font」を「Courier New」にして実行してみると、それなりに見えました。
TeXっぽい表示はできないのかな。Wolfram言語では「TeXForm[]」という関数がありますが、VB側の画面があくまでもStringなので、そのままでは厳しい。
これは、時間があれば、そのうち考えてみることします。
もう一つ関数を試してみます。微分。
-
上段のテキストボックスに、
D[x^n, x]
と入力します。「Evaluate」をクリックすると、結果は次のようになります。
これもよさそうですね。1行で表示したり、等幅ではないフォントだと「なんのこっちゃ」となるかもしれません。
Copyright (c) 2023-2024, techtechlab by DataWith