예제 #1
0
파일: PowTest.cs 프로젝트: sys27/xFunc
        public void ExecuteTest5()
        {
            var complex = new Complex(-3, 2);
            var exp = new Pow(new ComplexNumber(complex), new Number(10));

            Assert.Equal(Complex.Pow(complex, 10), exp.Execute());
        }
예제 #2
0
 public void PartialDerivativeTest2()
 {
     // (yx) ^ 3
     IExpression exp = new Pow(new Mul(new Variable("y"), new Variable("x")), new Number(3));
     IExpression deriv = exp.Differentiate(new Variable("y"));
     Assert.AreEqual("(1 * x) * (3 * ((y * x) ^ (3 - 1)))", deriv.ToString());
 }
예제 #3
0
        public void DerivativeTest3()
        {
            // x ^ 3
            Variable x = new Variable("x");
            Number num1 = new Number(3);

            IExpression exp = new Pow(x, num1);
            IExpression deriv = exp.Differentiate();

            Assert.AreEqual("1 * (3 * (x ^ (3 - 1)))", deriv.ToString());

            num1.Value = 4;
            Assert.AreEqual("x ^ 4", exp.ToString());
            Assert.AreEqual("1 * (3 * (x ^ (3 - 1)))", deriv.ToString());

            // 2 ^ (3x)
            Number num2 = new Number(2);
            num1 = new Number(3);
            Mul mul = new Mul(num1, x.Clone());

            exp = new Pow(num2, mul);
            deriv = exp.Differentiate();

            Assert.AreEqual("(ln(2) * (2 ^ (3 * x))) * (3 * 1)", deriv.ToString());

            num1.Value = 4;
            Assert.AreEqual("2 ^ (4 * x)", exp.ToString());
            Assert.AreEqual("(ln(2) * (2 ^ (3 * x))) * (3 * 1)", deriv.ToString());
        }
예제 #4
0
        public void DerivativeTest1()
        {
            IExpression exp = new Pow(new Variable("x"), new Number(3));
            IExpression deriv = exp.Differentiate();

            Assert.AreEqual("1 * (3 * (x ^ (3 - 1)))", deriv.ToString());
        }
예제 #5
0
        public void DerivativeTest2()
        {
            // 2 ^ (3x)
            IExpression exp = new Pow(new Number(2), new Mul(new Number(3), new Variable("x")));
            IExpression deriv = exp.Differentiate();

            Assert.AreEqual("(ln(2) * (2 ^ (3 * x))) * (3 * 1)", deriv.ToString());
        }
예제 #6
0
파일: PowTest.cs 프로젝트: sys27/xFunc
        public void ExecuteTest4()
        {
            var complex1 = new Complex(-3, 2);
            var complex2 = new Complex(-4, 5);
            var exp = new Pow(new ComplexNumber(complex1), new ComplexNumber(complex2));

            Assert.Equal(Complex.Pow(complex1, complex2), exp.Execute());
        }
예제 #7
0
        public void MulSameVar10()
        {
            // 2x * -2x
            var var = new Variable("x");
            var mul = new Mul(new Mul(new Number(2), var), new Mul(new Number(0.5), var));
            var expected = new Pow(var, new Number(2));

            SimpleTest(mul, expected);
        }
예제 #8
0
 public void PowPartialDerivativeTest3()
 {
     var exp = new Pow(new Variable("x"), new Number(3));
     var deriv = Differentiate(exp, new Variable("y"));
     Assert.Equal("0", deriv.ToString());
 }
예제 #9
0
        public void PowDerivativeTest3()
        {
            // x ^ 3
            var x = new Variable("x");
            var num1 = new Number(3);

            var exp = new Pow(x, num1);
            var deriv = Differentiate(exp);

            Assert.Equal("1 * 3 * (x ^ (3 - 1))", deriv.ToString());

            num1.Value = 4;
            Assert.Equal("x ^ 4", exp.ToString());
            Assert.Equal("1 * 3 * (x ^ (3 - 1))", deriv.ToString());

            // 2 ^ (3x)
            var num2 = new Number(2);
            num1 = new Number(3);
            var mul = new Mul(num1, x.Clone());

            exp = new Pow(num2, mul);
            deriv = Differentiate(exp);

            Assert.Equal("ln(2) * (2 ^ (3 * x)) * 3 * 1", deriv.ToString());

            num1.Value = 4;
            Assert.Equal("2 ^ (4 * x)", exp.ToString());
            Assert.Equal("ln(2) * (2 ^ (3 * x)) * 3 * 1", deriv.ToString());
        }
예제 #10
0
        public void PowDerivativeTest1()
        {
            var exp = new Pow(new Variable("x"), new Number(3));
            var deriv = Differentiate(exp);

            Assert.Equal("1 * 3 * (x ^ (3 - 1))", deriv.ToString());
        }
예제 #11
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Root(Root expression, Variable variable)
        {
            var div = new Div(new Number(1), expression.Right.Clone());
            var pow = new Pow(expression.Left.Clone(), div);

            return Pow(pow, variable);
        }
예제 #12
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Div(Div expression, Variable variable)
        {
            var first = Parser.HasVar(expression.Left, variable);
            var second = Parser.HasVar(expression.Right, variable);

            if (first && second)
            {
                var mul1 = new Mul(_Differentiate(expression.Left.Clone(), variable), expression.Right.Clone());
                var mul2 = new Mul(expression.Left.Clone(), _Differentiate(expression.Right.Clone(), variable));
                var sub = new Sub(mul1, mul2);
                var inv = new Pow(expression.Right.Clone(), new Number(2));
                var division = new Div(sub, inv);

                return division;
            }
            if (first)
            {
                return new Div(_Differentiate(expression.Left.Clone(), variable), expression.Right.Clone());
            }
            if (second)
            {
                var mul2 = new Mul(expression.Left.Clone(), _Differentiate(expression.Right.Clone(), variable));
                var unMinus = new UnaryMinus(mul2);
                var inv = new Pow(expression.Right.Clone(), new Number(2));
                var division = new Div(unMinus, inv);

                return division;
            }

            return new Number(0);
        }
예제 #13
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arccot(Arccot expression, Variable variable)
        {
            var involution = new Pow(expression.Argument.Clone(), new Number(2));
            var add = new Add(new Number(1), involution);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), add);
            var unMinus = new UnaryMinus(div);

            return unMinus;
        }
예제 #14
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arccos(Arccos expression, Variable variable)
        {
            var pow = new Pow(expression.Argument.Clone(), new Number(2));
            var sub = new Sub(new Number(1), pow);
            var sqrt = new Sqrt(sub);
            var division = new Div(_Differentiate(expression.Argument.Clone(), variable), sqrt);
            var unMinus = new UnaryMinus(division);

            return unMinus;
        }
예제 #15
0
 public void PowPartialDerivativeTest3()
 {
     IExpression exp = new Pow(new Variable("x"), new Number(3));
     IExpression deriv = Differentiate(exp, new Variable("y"));
     Assert.AreEqual("0", deriv.ToString());
 }
예제 #16
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Cot(Cot expression, Variable variable)
        {
            var sine = new Sin(expression.Argument.Clone());
            var involution = new Pow(sine, new Number(2));
            var division = new Div(_Differentiate(expression.Argument.Clone(), variable), involution);
            var unMinus = new UnaryMinus(division);

            return unMinus;
        }
예제 #17
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Coth(Coth expression, Variable variable)
        {
            var sinh = new Sinh(expression.Argument.Clone());
            var inv = new Pow(sinh, new Number(2));
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), inv);
            var unMinus = new UnaryMinus(div);

            return unMinus;
        }
예제 #18
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arcsch(Arcsch expression, Variable variable)
        {
            var inv = new Pow(expression.Argument.Clone(), new Number(2));
            var add = new Add(new Number(1), inv);
            var sqrt = new Sqrt(add);
            var abs = new Abs(expression.Argument.Clone());
            var mul = new Mul(abs, sqrt);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), mul);
            var unMinus = new UnaryMinus(div);

            return unMinus;
        }
예제 #19
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Pow(Pow expression, Variable variable)
        {
            if (Parser.HasVar(expression.Left, variable))
            {
                var sub = new Sub(expression.Right.Clone(), new Number(1));
                var inv = new Pow(expression.Left.Clone(), sub);
                var mul1 = new Mul(expression.Right.Clone(), inv);
                var mul2 = new Mul(_Differentiate(expression.Left.Clone(), variable), mul1);

                return mul2;
            }

            // if (Parser.HasVar(expression.Right, variable))
            var ln = new Ln(expression.Left.Clone());
            var mul3 = new Mul(ln, expression.Clone());
            var mul4 = new Mul(mul3, _Differentiate(expression.Right.Clone(), variable));

            return mul4;
        }
예제 #20
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arcsec(Arcsec expression, Variable variable)
        {
            var abs = new Abs(expression.Argument.Clone());
            var sqr = new Pow(expression.Argument.Clone(), new Number(2));
            var sub = new Sub(sqr, new Number(1));
            var sqrt = new Sqrt(sub);
            var mul = new Mul(abs, sqrt);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), mul);

            return div;
        }
예제 #21
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Tanh(Tanh expression, Variable variable)
        {
            var cosh = new Cosh(expression.Argument.Clone());
            var inv = new Pow(cosh, new Number(2));
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), inv);

            return div;
        }
예제 #22
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arcsin(Arcsin expression, Variable variable)
        {
            var involution = new Pow(expression.Argument.Clone(), new Number(2));
            var sub = new Sub(new Number(1), involution);
            var sqrt = new Sqrt(sub);
            var division = new Div(_Differentiate(expression.Argument.Clone(), variable), sqrt);

            return division;
        }
예제 #23
0
        public void PowDerivativeTest2()
        {
            // 2 ^ (3x)
            var exp = new Pow(new Number(2), new Mul(new Number(3), new Variable("x")));
            var deriv = Differentiate(exp);

            Assert.Equal("ln(2) * (2 ^ (3 * x)) * 3 * 1", deriv.ToString());
        }
예제 #24
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arctan(Arctan expression, Variable variable)
        {
            var involution = new Pow(expression.Argument.Clone(), new Number(2));
            var add = new Add(new Number(1), involution);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), add);

            return div;
        }
예제 #25
0
 public void PowPartialDerivativeTest2()
 {
     // (yx) ^ 3
     var exp = new Pow(new Mul(new Variable("y"), new Variable("x")), new Number(3));
     var deriv = Differentiate(exp, new Variable("y"));
     Assert.Equal("1 * x * 3 * ((y * x) ^ (3 - 1))", deriv.ToString());
 }
예제 #26
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arsech(Arsech expression, Variable variable)
        {
            var inv = new Pow(expression.Argument.Clone(), new Number(2));
            var sub = new Sub(new Number(1), inv);
            var sqrt = new Sqrt(sub);
            var mul = new Mul(expression.Argument.Clone(), sqrt);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), mul);
            var unMinus = new UnaryMinus(div);

            return unMinus;
        }
예제 #27
0
        public void MulSameVar1()
        {
            // x * x
            var var = new Variable("x");
            var mul = new Mul(var, var);
            var expected = new Pow(var, new Number(2));

            SimpleTest(mul, expected);
        }
예제 #28
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Arsinh(Arsinh expression, Variable variable)
        {
            var sqr = new Pow(expression.Argument.Clone(), new Number(2));
            var add = new Add(sqr, new Number(1));
            var sqrt = new Sqrt(add);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), sqrt);

            return div;
        }
예제 #29
0
        public void PowerZero()
        {
            var pow = new Pow(new Variable("x"), new Number(0));
            var expected = new Number(1);

            SimpleTest(pow, expected);
        }
예제 #30
0
        /// <summary>
        /// Differentiates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="variable">The variable.</param>
        /// <returns>Returns the derivative.</returns>
        protected virtual IExpression Artanh(Artanh expression, Variable variable)
        {
            var sqr = new Pow(expression.Argument.Clone(), new Number(2));
            var sub = new Sub(new Number(1), sqr);
            var div = new Div(_Differentiate(expression.Argument.Clone(), variable), sub);

            return div;
        }