double Rectangle(ExpressionParameters parameters) { if (parameters == null) parameters = new ExpressionParameters (); var result = 0.0M; var left = (decimal)(double)this.Left.Calculate (parameters); var right = (decimal)(double)this.Right.Calculate (parameters); if (right <= left) throw new InvalidOperationException ("Invalid Intergral-Bounds"); var n = 1000; // number of rectangles var dx = (right - left) / (decimal)n; var param = default(Parameter); foreach (var p in parameters.Parameters.Collection) { if (p.Key == this.Variable.Name) { param = p; break; } } if (param == null) { param = new Parameter ( this.Variable.Name, 0, ParameterType.Normal); parameters.Parameters.Add (param); } for (var x = left; x <= right; x += dx) { param.Value = (double)x; var z = (double)this.Body.Calculate (parameters); result += (dx * (decimal)z); } return (double)result; }
double Simpson(ExpressionParameters parameters) { if (parameters == null) parameters = new ExpressionParameters (); var a = (double)this.Left.Calculate (parameters); var b = (double)this.Right.Calculate (parameters); if (b <= a) throw new InvalidOperationException ("Invalid Intergral-Bounds"); var n = 10000; // number of rectangles var h = (b - a) / (double)n; var param = default(Parameter); foreach (var p in parameters.Parameters.Collection) { if (p.Key == this.Variable.Name) { param = p; break; } } if (param == null) { param = new Parameter ( this.Variable.Name, 0, ParameterType.Normal); parameters.Parameters.Add (param); } var sum = 0.0; for (var i = 1; i <= n - 3; i = i + 2) { param.Value = a + i * h; sum += (double)this.Body.Calculate (parameters); } param.Value = a + (n - 1) * h; sum += (double)this.Body.Calculate (parameters); sum *= 4; var sum2 = 0.0; for (var i = 2; i <= n - 4; i += 2) { param.Value = a + i * h; sum2 += (double)this.Body.Calculate (parameters); } param.Value = a + (n - 2) * h; sum2 += (double)this.Body.Calculate (parameters); sum2 *= 2; sum += sum2; param.Value = a; sum += (double)this.Body.Calculate (parameters); param.Value = b; sum += (double)this.Body.Calculate (parameters); return Math.Round ( h / 3 * sum, 5 ); }
public VariableViewModel(Parameter parameter) { this.parameter = parameter; }