Exemple #1
0
        public override Expression SymbolicDiff(Variable var)
        {
            var u    = Left;
            var v    = Right;
            var dudx = Left.SymbolicDiff(var);
            var dvdx = Right.SymbolicDiff(var);

            return(v * Sym.Pow(u, v - 1) * dudx + Sym.Pow(u, v) * Sym.Ln(u) * dvdx);
        }
Exemple #2
0
        public SmoothMin(Expression left, Expression right, double k = 10)
        {
            Symbol = "smin";
            Left   = left;
            Right  = right;
            //_expr = 0.5 * (Left + Right + Sym.Abs(Left - Right));
            _expr = Sym.Ln(Sym.Exp(-k * left) + Sym.Exp(-k * right)) / -k;

            EvalFunctional = (c) => Math.Min(Left.Eval(c), Right.Eval(c));
            DiffFunctional = (c, var) => _expr.Diff(c, var);
        }