Beispiel #1
0
        /// <summary>
        /// Convert the given Mathematica Expr object into a SymbolicExpr object
        /// </summary>
        /// <param name="expr"></param>
        /// <returns></returns>
        public static SteExpression ToTextExpressionTree(this Expr expr)
        {
            var isNumber = expr.NumberQ();
            var isSymbol = expr.SymbolQ();

            if (isNumber)
            {
                return(isSymbol
                    ? SteExpressionUtils.CreateSymbolicNumber(expr.ToString())
                    : SteExpressionUtils.CreateLiteralNumber(expr.ToString()));
            }

            if (isSymbol)
            {
                return(SteExpressionUtils.CreateVariable(expr.ToString()));
            }

            if (expr.Args.Length == 0)
            {
                return(SteExpressionUtils.CreateFunction(expr.ToString()));
            }
            //return new SymbolicExpr(expr.ToString(), isSymbol, isNumber);

            var args = new SteExpression[expr.Args.Length];

            for (var i = 0; i < expr.Args.Length; i++)
            {
                args[i] = ToTextExpressionTree(expr.Args[i]);
            }

            return(SteExpressionUtils.CreateFunction(expr.Head.ToString(), args));
        }
        private static SteExpression ConvertNumber(SteExpression numberExpr)
        {
            var rationalHeadIndex = numberExpr.HeadText.IndexOf(@"Rational[", StringComparison.Ordinal);

            //This is an ordinary number, return as-is
            if (rationalHeadIndex < 0)
            {
                return(numberExpr.CreateCopy());
            }

            //This is a rational atomic number; for example Rational[1, 2].
            //Extract components and convert to floating point
            var numberTextFull = numberExpr.HeadText.Substring(@"Rational[".Length);
            var commaIndex     = numberTextFull.IndexOf(',');
            var bracketIndex   = numberTextFull.IndexOf(']');

            var num1Text = numberTextFull.Substring(0, commaIndex);
            var num2Text = numberTextFull.Substring(commaIndex + 1, bracketIndex - commaIndex - 1);

            return(SteExpressionUtils.CreateLiteralNumber(
                       double.Parse(num1Text) / double.Parse(num2Text)
                       ));
        }
Beispiel #3
0
 /// <summary>
 /// Create a literal number expression like "2", "-1.7" and "3.56e-4"
 /// </summary>
 /// <param name="numberText"></param>
 /// <returns></returns>
 public SteExpression LiteralNumber(string numberText)
 {
     return(SteExpressionUtils.CreateLiteralNumber(numberText));
 }
Beispiel #4
0
 /// <summary>
 /// Create a literal number expression like "2", "-1.7" and "3.56e-4"
 /// </summary>
 /// <param name="number"></param>
 /// <returns></returns>
 public SteExpression LiteralNumber(float number)
 {
     return(SteExpressionUtils.CreateLiteralNumber(number));
 }