static public double?IntegralWithError(ICollection <XYDataModel> dataValue, double a = 0, double b = 0, double E = 0.01) { double ErrorValue = 1; if (a >= b) { a = dataValue.Select(X => X.X).ToList().Min(); b = dataValue.Select(X => X.X).ToList().Max(); } double step = (b - a) / dataValue.Count; ICollection <XYDataModel> tempValue = new List <XYDataModel> { }; while (ErrorValue > E) { step /= 2.0; tempValue = new List <XYDataModel> { }; for (double i = a; i <= b; i += step) { tempValue.Add(new XYDataModel { X = i, Y = Math.Round(_interpolation.InterpolationPolynom(dataValue, i), 15) }); } ErrorValue = Error(tempValue, step, a, b); } return(Integral(tempValue, step, a, b)); }
static public double?DifferentiationWithRunge(ICollection <XYDataModel> dataValue, double xValue, double E = 0.01) { double ErrorValue = 1; double valueH = 0, valueH2 = 0; double step = (dataValue.Last().X - dataValue.First().X) / dataValue.Count; while (ErrorValue > E) { ICollection <XYDataModel> tempValue = new List <XYDataModel> { }; for (double a = dataValue.First().X; a <= dataValue.Last().X; a += step) { tempValue.Add(new XYDataModel { X = a, Y = Math.Round(_interpolation.InterpolationPolynom(dataValue, a), 15) }); } valueH = valueH2; valueH2 = Differentiation(tempValue, xValue).Value; ErrorValue = Math.Abs(valueH2 - valueH); step /= 2.0; } return(valueH2); }
static public double Interpolation(ICollection <XYDataModel> data, double X) => _interpolation.InterpolationPolynom(data, X);