Example #1
0
        static void Main(string[] args)
        {
            /*
             * Currently implemented:
             *  Sums
             *  Products
             *  Quotients
             *  Numeric constants
             *  Variable constants (constants that can be changed)
             *  Variables
             *
             * Functionality:
             *  (Partial) derivatives
             *  Calculations
             *  Printing of formulas
             *
             * Notes:
             *  Simplification does not yet do anything beyond removing the following:
             *      A * 0 -> 0
             *      A * 1 -> A
             *      A + 0 -> A
             *      A / 1 -> A
             *      0 / A -> 0
             *      Number / Number -> Number
             *      Number + Number -> Number
             *      Number * Number -> Number
             *
             */

            var A = new VariableArgumentValue("A"); //create arguments with values, IE variables. The values of the variables can be changed using "ConstantArgumentValue" and "VariableArgumentValue".

            var B = new ConstantArgumentValue("B"); //A variable constant. Can only be used to create constants in the syntax.

            var C = new VariableArgumentValue("C"); //A true variable. Can only be used to create variables in the syntax.
            var D = new VariableArgumentValue("D");

            A.Value = 10;//change their value, their value type is a double.
            B.Value = 13;
            C.Value = 14.67;
            D.Value = -3;

            SyntaxBlock SomeSum = new Sum(new Variable(A), new Sum(new VariableConstant(B), new NumericConstant(420))); //create a formula.

            Console.WriteLine(SomeSum.print());                                                                         //print the forumula
            Console.WriteLine(SomeSum.Calculate());                                                                     //Calculate the results of a formula

            Console.WriteLine("\nCalculating partial derivatives");


            SyntaxBlock functionA, functionB;

            functionA = new Product(new NumericConstant(44), new Product(new Variable(A), new Variable(C)));
            functionB = new Product(new VariableConstant(B), new Product(new Variable(A), new Variable(D)));

            SyntaxBlock ComplexSum               = new Sum(functionA, functionB);                                                               //functions of functions
            SyntaxBlock SuperComplexProduct      = new Product(ComplexSum, ComplexSum);                                                         //functions of functions of functions
            SyntaxBlock SuperSuperComplexProduct = new Product(SuperComplexProduct, SuperComplexProduct);                                       //functions^4

            List <Tuple <VariableArgumentValue, SyntaxBlock> > derivatives = Derivatives.CalculatePartialDerivatives(SuperSuperComplexProduct); //Calculate all the partial derivatives of a given function.

            //A Function to calculate the derivative for a simple (single argument) function is also present, but will throw an exception if the formula given has more than one variable.
            //swap out "SuperSuperComplexProduct" for any other syntaxblock to see the result.
            foreach (var i in derivatives)
            {
                Console.WriteLine(i.Item1.Name + " : " + i.Item2.print()); //print the resulting derivatives
                Console.WriteLine();
            }

            double CalculationResult = derivatives[0].Item2.Calculate(); //calculate the result of a derivative function.

            Console.WriteLine("Calculation result: " + CalculationResult);



            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
 public InputNeuron(ConstantArgumentValue Value)
 {
     this.Value = Value;
 }