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 }); }
public override HashSet <Variable> Incidence() { if (DefiningExpression != null) { if (_incidence == null) { _incidence = DefiningExpression.Incidence(); } return(_incidence); } return(new HashSet <Variable> { this }); }
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); }
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); }