我正在评估Math.NET Symbolics在我们的应用程序中使用,我们想要一个简单的数学解析器供用户从我们的测量数据中计算自定义方程。我们的数据采用Complex数字形式。
要测试我在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();
P.S。:操作员的奖励积分也可以让我不用手动计算相位。