ユーザーが測定データからカスタム方程式を計算するための単純な数学パーサーが必要なアプリケーションで使用するために、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: オペレーターが手動で計算せずにフェーズを取得するためのボーナス ポイント。