private static List <double> GetResultBreakPoints(PiecewiseFunction f, PiecewiseFunction g) { // добавить обработку полюсов var fBreaks = f.GetBreakPoints(); var gBreaks = g.GetBreakPoints(); // вычисляем произведения точек разрыва, оставляем только уникальные var breakPointProducts = new List <double>(); foreach (var fBreak in fBreaks) { foreach (var gBreak in gBreaks) { var product = fBreak * gBreak; if (!double.IsNaN(product) && !breakPointProducts.Contains(product)) // добавить проверку на мин. значение произведения { breakPointProducts.Add(product); } } } breakPointProducts.Sort(); return(breakPointProducts); }
private static PiecewiseFunction GetSplittedPiecewiseFunction(PiecewiseFunction function) { var breaks = function.GetBreakPoints(); // непонятное условие //if (breaks.First() > 0 || breaks.Last() < 0) //{ // return function; //} if (!breaks.Contains(0)) { breaks.Add(0); } breaks.Sort(); var index = breaks.IndexOf(0); if (index == breaks.Count - 2) // предпоследний { if (double.IsInfinity(breaks[index + 1]) && !breaks.Contains(-1)) { breaks.Add(-1); } else { var valueToInsert = breaks[index + 1] / 2; if (!breaks.Contains(valueToInsert)) { breaks.Add(valueToInsert); } } } if (index == 1) // второй { if (double.IsInfinity(breaks[index - 1]) && !breaks.Contains(-1)) { breaks.Add(-1); } else { var valueToInsert = breaks[index - 1] / 2; if (!breaks.Contains(valueToInsert)) { breaks.Add(valueToInsert); } } } breaks.Sort(); return(function.SplitByPoints(breaks)); }