Ejemplo n.º 1
0
        public override Expression SymbolicDiff(Variable var)
        {
            if (DefiningExpression != null)
            {
                if (_incidence == null)
                {
                    Incidence();
                }

                if (_incidence.Contains(var))
                {
                    // var dxdy = new Variable("d" + Name + "d" + var.Name, 1);
                    //dxdy.BindTo(DefiningExpression.Diff(var));
                    //return dxdy;
                    return(DefiningExpression.SymbolicDiff(var));
                }
                else
                {
                    return(0);
                }
            }


            return(new IntegerLiteral {
                Value = this == var ? 1 : 0
            });
        }
Ejemplo n.º 2
0
        public override HashSet <Variable> Incidence()
        {
            if (DefiningExpression != null)
            {
                if (_incidence == null)
                {
                    _incidence = DefiningExpression.Incidence();
                }
                return(_incidence);
            }

            return(new HashSet <Variable> {
                this
            });
        }
Ejemplo n.º 3
0
        public override double Diff(Evaluator evaluator, Variable var)
        {
            if (DefiningExpression != null)
            {
                if (_incidence == null)
                {
                    Incidence();
                }

                if (_incidence.Contains(var))
                {
                    return(DefiningExpression.Diff(evaluator, var));
                }
                else
                {
                    return(0);
                }
            }

            return(this == var ? 1 : 0);
        }
Ejemplo n.º 4
0
        public override double Eval(Evaluator evaluator)
        {
            if (DefiningExpression != null)
            {
                ValueInSI = DefiningExpression.Eval(evaluator);

                if (Double.IsNaN(ValueInSI))
                {
                    ValueInSI = 0;
                }
                if (ValueInSI > UpperBound)
                {
                    ValueInSI = UpperBound;
                }
                if (ValueInSI < LowerBound)
                {
                    ValueInSI = LowerBound;
                }

                //  ValueInSI = Math.Max(Math.Min(ValueInSI, UpperBound), LowerBound);
            }

            return(ValueInSI);
        }