/// <summary>
        ///     Parse aproximation Z from string.
        ///     All required derivations are calculated automatically.
        /// </summary>
        /// <returns>
        ///     Instance of class if expression is correct math Z, othervise
        ///     returns null;
        /// </returns>
        public static AproximationFunction FromExpression(AproximationExpression expression)
        {
            var engine = new CalcEngine();

            engine.Variables[expression.Var1] = 0.0d;
            engine.Variables[expression.Var2] = 0.0d;
            try
            {
                engine.Evaluate(expression.Expression);
            }
            catch (Exception)
            {
                return(null);
            }
            Func <double, double, double> function = (x, y) =>
            {
                engine.Variables[expression.Var1] = x;
                engine.Variables[expression.Var2] = y;
                var result = (double)engine.Evaluate(expression.Expression);
                return(result);
            };

            return(new AproximationFunction(function));
        }
 public override MathFunction Interpret()
 {
     var calcEngine = new CalcEngine();
     foreach (var variable in Variables)
     {
         calcEngine.Variables.Add(variable, 0);
     }
     return vals =>
     {
         for (var i = 0; i < vals.Length; i++)
         {
             calcEngine.Variables[Variables[i]] = vals[i];
         }
         return (double) calcEngine.Evaluate(Expression);
     };
 }