6

ユーザーが測定データからカスタム方程式を計算するための単純な数学パーサーが必要なアプリケーションで使用するために、Math.NET シンボリックを評価しています。データは複素数の形式です。

テストするには、LINQPad で次のコード スニペットを使用します。

var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB }
    };

Evaluate.Evaluate(symbols, Infix.ParseOrUndefined("1/(a*b)+cos(b)")).ComplexValue.Dump();

これはうまく機能しますが、次の演算子が見つかりませんでした:
シンボルの REAL または IMAGINARY 部分を取得するにはどうすればよいですか?

real(b)とを試しimag(b)ましたが、うまくいきませんでした。

回避策として、次のこともできますが、次のような演算子をabs(b)使用してマグニチュードを取得することをお勧めします。

var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB },
        { "b_REAL", complexB.Real },
        { "b_IMAG", complexB.Imaginary }
    };

Evaluate.Evaluate(symbols, Infix.ParseOrUndefined("1/(a*b)+b_REAL")).ComplexValue.Dump();

PS: オペレーターが手動で計算せずにフェーズを取得するためのボーナス ポイント。

4

0 に答える 0