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)))); }
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 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 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 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)))); }
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)))); }
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)); }