Example #1
0
        public void GetExceptionExtrapolatingValues2ArgsFunction()
        {
            IVariable <double> x  = new Variable <double>("x");
            IVariable <double> y  = new Variable <double>("y");
            IVariable <double> f1 = new Variable <double>("f1");

            IFunction function = new Function("testfunction");

            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);

            var xValues = new[] { 1.0, 2.0, 3.0 };
            var yValues = new[] { 10.0, 20.0, 30.0, 40.0 };
            var fValues = new[, ]
            {
                { 100.0, 200.0, 300.0, 400.0 },
                { 1000.0, 2000.0, 3000.0, 4000.0 },
                { 10000.0, 20000.0, 30000.0, 40000.0 }
            };

            function.SetValues(fValues, new VariableValueFilter <double>(x, xValues), new VariableValueFilter <double>(y, yValues),
                               new ComponentFilter(f1));

            //no interpolation..on a defined spot
            Assert.AreEqual(100,
                            f1.Evaluate <double>(new VariableValueFilter <double>(x, 0.5),
                                                 (new VariableValueFilter <double>(y, 10.0))));

            Assert.AreEqual(100,
                            f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.5),
                                                 (new VariableValueFilter <double>(y, 10.0))));
        }
Example #2
0
        public void InterpolatedConstant2D()
        {
            IVariable <double> x  = new Variable <double>("x");
            IVariable <double> y  = new Variable <double>("y");
            IVariable <double> f1 = new Variable <double>("f1");

            Function function = new Function("testfunction");

            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);

            x.InterpolationType = ApproximationType.Constant;
            y.InterpolationType = ApproximationType.Constant;

            var xValues = new double[] { 1.0, 2.0, 3.0 };
            var yValues = new double[] { 10.0, 20.0, 30.0, 40.0 };
            var fValues = new[, ]
            {
                { 100.0, 200.0, 300.0, 400.0 },
                { 1000.0, 2000.0, 3000.0, 4000.0 },
                { 10000.0, 20000.0, 30000.0, 40000.0 }
            };

            function.SetValues(fValues, new VariableValueFilter <double>(x, xValues), new VariableValueFilter <double>(y, yValues), new ComponentFilter(f1));

            //interpolation among first argument
            Assert.AreEqual(100.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.6), (new VariableValueFilter <double>(y, 10.0))));

            //interpolation among second argument
            Assert.AreEqual(200.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.0), (new VariableValueFilter <double>(y, 26.0))));

            //interpolation among two arguments
            Assert.AreEqual(200.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.6), (new VariableValueFilter <double>(y, 26.0))), 0.001);
        }
Example #3
0
        public void InterpolatedLinear2D()
        {
            IVariable <double> x  = new Variable <double>("x");
            IVariable <double> y  = new Variable <double>("y");
            IVariable <double> f1 = new Variable <double>("f1");

            var function = new Function("testfunction");

            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);

            var xValues = new[] { 1.0, 2.0, 3.0 };
            var yValues = new[] { 10.0, 20.0, 30.0, 40.0 };
            var fValues = new[, ]
            {
                { 100.0, 200.0, 300.0, 400.0 },
                { 1000.0, 2000.0, 3000.0, 4000.0 },
                { 10000.0, 20000.0, 30000.0, 40000.0 }
            };

            function.SetValues(fValues, new VariableValueFilter <double>(x, xValues), new VariableValueFilter <double>(y, yValues), new ComponentFilter(f1));

            //no interpolation..on a defined spot
            Assert.AreEqual(100, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.0), (new VariableValueFilter <double>(y, 10.0))));

            //interpolation among first argument
            Assert.AreEqual(640.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.6), (new VariableValueFilter <double>(y, 10.0))), 0.001);

            //interpolation among second argument
            Assert.AreEqual(260.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.0), (new VariableValueFilter <double>(y, 26.0))), 0.001);

            //interpolation among two arguments
            Assert.AreEqual(1664.0, f1.Evaluate <double>(new VariableValueFilter <double>(x, 1.6), (new VariableValueFilter <double>(y, 26.0))), 0.001);
        }
Example #4
0
        public void GetUniformInterpolatedValue()
        {
            IVariable <double> x  = new Variable <double>("x");
            IVariable <double> y  = new Variable <double>("y");
            IVariable <double> f1 = new Variable <double>("f1");

            f1.Arguments.Add(x);
            f1.Arguments.Add(y);

            var xValues = new[] { 1.0, 2.0 };
            var yValues = new[] { 1.0, 2.0 };

            var fValues = new[, ]
            {
                { 100.0, 100.0 },
                { 100.0, 100.0 }
            };

            f1.SetValues(fValues,
                         new VariableValueFilter <double>(x, xValues),
                         new VariableValueFilter <double>(y, yValues));


            var value = f1.Evaluate <double>(
                new VariableValueFilter <double>(x, 1.5),
                new VariableValueFilter <double>(y, 1.5));

            Assert.AreEqual(100, value);
        }
Example #5
0
        public object Call(jsObject Context, jsObject ArgList, object This = null, Engine Engine = null)
        {
            var Args = GetFunctionArguments(this, Context, ArgList);

            if (!Args.ContainsKey("this"))
            {
                Variable.Set(
                    "this",
                    Args,
                    This == null && Object != null ?
                    Object.Evaluate(Context) :
                    This
                    );
            }

            return(this.Evaluate(Args));
        }
        public void GetInterpolatedValueReturnsDefaultValueOnEmpty2ArgsFunction()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            x.ExtrapolationType = ExtrapolationType.Constant;
            y.ExtrapolationType = ExtrapolationType.Constant;
            
            IVariable<double> f1 = new Variable<double>("f1");

            IFunction function = new Function("testfunction");
            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);
            f1.DefaultValue = 100.0;

            Assert.AreEqual(100,
                            f1.Evaluate<double>(x.CreateValueFilter(7.5),
                                                (new VariableValueFilter<double>(y, 68.2))));
        }
Example #7
0
        public void GetInterpolatedValueReturnsDefaultValueOnEmpty2ArgsFunction()
        {
            IVariable <double> x = new Variable <double>("x");
            IVariable <double> y = new Variable <double>("y");

            x.ExtrapolationType = ExtrapolationType.Constant;
            y.ExtrapolationType = ExtrapolationType.Constant;

            IVariable <double> f1 = new Variable <double>("f1");

            IFunction function = new Function("testfunction");

            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);
            f1.DefaultValue = 100.0;

            Assert.AreEqual(100,
                            f1.Evaluate <double>(x.CreateValueFilter(7.5),
                                                 (new VariableValueFilter <double>(y, 68.2))));
        }
        public void GetUniformInterpolatedValue()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            IVariable<double> f1 = new Variable<double>("f1");

            f1.Arguments.Add(x);
            f1.Arguments.Add(y);
            
            var xValues = new[] { 1.0, 2.0 };
            var yValues = new[] { 1.0, 2.0 };

            var fValues = new[,]
                              {
                                  {100.0, 100.0},
                                  {100.0, 100.0}
                              };
            f1.SetValues(fValues,
                         new VariableValueFilter<double>(x, xValues),
                         new VariableValueFilter<double>(y, yValues));


            var value = f1.Evaluate<double>(
                new VariableValueFilter<double>(x, 1.5),
                new VariableValueFilter<double>(y, 1.5));
            Assert.AreEqual(100,value);
        }
        public void InterpolatedLinear2D()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            IVariable<double> f1 = new Variable<double>("f1");

            var function = new Function("testfunction");
            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);

            var xValues = new[] { 1.0, 2.0, 3.0 };
            var yValues = new[] { 10.0, 20.0, 30.0, 40.0 };
            var fValues = new[,]
                              {
                                  {100.0, 200.0, 300.0, 400.0},
                                  {1000.0, 2000.0, 3000.0, 4000.0},
                                  {10000.0, 20000.0, 30000.0, 40000.0}
                              };

            function.SetValues(fValues, new VariableValueFilter<double>(x, xValues), new VariableValueFilter<double>(y, yValues), new ComponentFilter(f1));

            //no interpolation..on a defined spot
            Assert.AreEqual(100, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.0), (new VariableValueFilter<double>(y, 10.0))));

            //interpolation among first argument
            Assert.AreEqual(640.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.6), (new VariableValueFilter<double>(y, 10.0))), 0.001);

            //interpolation among second argument
            Assert.AreEqual(260.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.0), (new VariableValueFilter<double>(y, 26.0))), 0.001);

            //interpolation among two arguments
            Assert.AreEqual(1664.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.6), (new VariableValueFilter<double>(y, 26.0))), 0.001);

        }
        public void ExpressionBase_Evaluation_Add_PlusOverload()
        {
            var expression = new Variable("x") + 1.0;

            Assert.AreEqual(1.5, expression.Evaluate(_replacements));
        }
        public void ExpressionBase_Evaluation_Variable_KeyNotFoundException()
        {
            ExpressionBase expression = new Variable("s");

            expression.Evaluate(_replacements);
        }
        public void ExpressionBase_IFunction_Evaluation_Constant_IFunction()
        {
            IFunction expression = new Variable("y");

            Assert.AreEqual(0.75, expression.Evaluate(0.75));
        }
        public void ExpressionBase_Evaluation_Multiply_DivideOverload()
        {
            var expression = new Variable("x") / 1.0;

            Assert.AreEqual(0.5, expression.Evaluate(_replacements));
        }
        public void InterpolatedConstant2D()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            IVariable<double> f1 = new Variable<double>("f1");

            Function function = new Function("testfunction");
            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);
            
            x.InterpolationType = ApproximationType.Constant;
            y.InterpolationType = ApproximationType.Constant;

            var xValues = new double[] { 1.0, 2.0, 3.0 };
            var yValues = new double[] { 10.0, 20.0, 30.0, 40.0 };
            var fValues = new[,]
                              {
                                  {100.0, 200.0, 300.0, 400.0},
                                  {1000.0, 2000.0, 3000.0, 4000.0},
                                  {10000.0, 20000.0, 30000.0, 40000.0}
                              };

            function.SetValues(fValues, new VariableValueFilter<double>(x, xValues), new VariableValueFilter<double>(y, yValues), new ComponentFilter(f1));

            //interpolation among first argument
            Assert.AreEqual(100.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.6), (new VariableValueFilter<double>(y, 10.0))));

            //interpolation among second argument
            Assert.AreEqual(200.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.0), (new VariableValueFilter<double>(y, 26.0))));

            //interpolation among two arguments
            Assert.AreEqual(200.0, f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.6), (new VariableValueFilter<double>(y, 26.0))), 0.001);

        }
        public void GetExceptionExtrapolatingValues2ArgsFunction()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            IVariable<double> f1 = new Variable<double>("f1");

            IFunction function = new Function("testfunction");
            function.Arguments.Add(x);
            function.Arguments.Add(y);
            function.Components.Add(f1);

            var xValues = new[] {1.0, 2.0, 3.0};
            var yValues = new[] {10.0, 20.0, 30.0, 40.0};
            var fValues = new[,]
                              {
                                  {100.0, 200.0, 300.0, 400.0},
                                  {1000.0, 2000.0, 3000.0, 4000.0},
                                  {10000.0, 20000.0, 30000.0, 40000.0}
                              };

            function.SetValues(fValues, new VariableValueFilter<double>(x, xValues), new VariableValueFilter<double>(y, yValues),
                               new ComponentFilter(f1));

            //no interpolation..on a defined spot
            Assert.AreEqual(100,
                            f1.Evaluate<double>(new VariableValueFilter<double>(x, 0.5),
                                                (new VariableValueFilter<double>(y, 10.0))));

            Assert.AreEqual(100,
                            f1.Evaluate<double>(new VariableValueFilter<double>(x, 1.5),
                                                (new VariableValueFilter<double>(y, 10.0))));

        }
Example #16
0
        static void Main(string[] args)
        {
            // Create some constants.
            Expression A = 2;
            Constant   B = Constant.New(3);

            // Create some variables.
            Expression x = "x";
            Variable   y = Variable.New("y");

            // Create a basic expressions.
            Expression f = A * x + B * y + 4;

            // This expression uses the implicit conversion from string to
            // Expression, which parses the string.
            Expression g = "5*x + C*y + 8";

            // Create a system of equations from the above expressions.
            var system = new List <Equal>()
            {
                Equal.New(f, 0),
                Equal.New(g, 0),
            };

            // We can now solve the system of equations for x and y. Since the
            // equations have a variable 'C', the solutions will not be
            // constants.
            List <Arrow> solutions = system.Solve(x, y);

            Console.WriteLine("The solutions are:");
            foreach (Arrow i in solutions)
            {
                Console.WriteLine(i.ToString());
            }

            // A fundamental building block of ComputerAlgebra is the 'Arrow'
            // expression. Arrow expressions define the value of one expression
            // to be the value given by another expression. For example, 'x->2'
            // defines the expression 'x' to have the value '2'.

            // The 'Solve' function used above returns a list of Arrow
            // expressions defining the solutions of the system.

            // Arrow expressions are used by the 'Evaluate' function to
            // substitute values for expressions into other expressions. To
            // demonstrate the usage of Evaluate, let's validate the solution
            // by using Evaluate to substitute the solutions into the original
            // system of equations, and then substitute a value for C.
            Expression f_xy = f.Evaluate(solutions).Evaluate(Arrow.New("C", 2));
            Expression g_xy = g.Evaluate(solutions).Evaluate(Arrow.New("C", 2));

            if ((f_xy == 0) && (g_xy == 0))
            {
                Console.WriteLine("Success!");
            }
            else
            {
                Console.WriteLine("Failure! f = {0}, g = {1}", f_xy, g_xy);
            }

            // Suppose we need to evaluate the solutions efficiently many times.
            // We can compile the solutions to delegates where 'C' is a
            // parameter to the delegate, allowing it to be specified later.
            var x_C = x.Evaluate(solutions).Compile <Func <double, double> >("C");
            var y_C = y.Evaluate(solutions).Compile <Func <double, double> >("C");

            for (int i = 0; i < 20; ++i)
            {
                double C = i / 2.0;
                Console.WriteLine("C = {0}: (x, y) = ({1}, {2})", C, x_C(C), y_C(C));
            }
        }
        public void ExpressionBase_Evaluation_Variable()
        {
            ExpressionBase expression = new Variable("x");

            Assert.AreEqual(0.5, expression.Evaluate(_replacements));
        }