Так как парабола - это изогнутая штуковина, то в рамках отрезка минимум и максимум у неё могут располагаться исключительно в трёх точках: либо это начало отрезка, либо конец отрезка, либо вершина параболы. Посему совершенно необязательно проходиться по всем точкам, проверяя, что там меньше, а что больше. Достаточно
вычислить значение функции в этих трёх точках и предоставить результат.
public class Test {
private static final double a = 3;
private static final double b = 1;
private static final double c = -4;
private static final double intervalStartX = -2.15;
private static final double intervalEndX = 1.5;
public static void main(String[] args) {
double[] valuesOfY = calcValuesOfY();
System.out.println("Функция: y = 3x^2 + x - 4");
System.out.println("Отрезок [" + intervalStartX + "; " + intervalEndX + "]");
System.out.println("Минимальное значение Y: " + findMinInArray(valuesOfY));
System.out.println("Максимальное значение Y: " + findMaxInArray(valuesOfY));
}
/**
* найти минимальное значение в массиве
*/
private static double findMinInArray(double[] array) {
double min = Double.MAX_VALUE;
for (double y : array) {
if (y < min) {
min = y;
}
}
return min;
}
/**
* найти максимальное значение в массиве
*/
private static double findMaxInArray(double[] array) {
double max = Double.MIN_VALUE;
for (double y : array) {
if (y > max) {
max = y;
}
}
return max;
}
/**
* рассчитать важные значения Y -
* так как минимум и максимум на отрезке параболы
* могут быть ытолько в трёх точках
* (начало отрезка, конец отрезка либо вершина параболы)
*/
private static double[] calcValuesOfY() {
double y1 = calcY(intervalStartX);
double y2 = calcY(intervalEndX);
double y3 = calcY(calcParabolaPeakX());
return new double[]{ y1, y2, y3 };
}
/**
* рассчитать X вершины параболы
*/
private static double calcParabolaPeakX() {
return -b / (2 * a);
}
/**
* рассчитать Y от X
*/
private static double calcY(double x) {
return a * x * x + b * x + c;
}
}