确定功能的极值

时间:2016-04-11 22:26:19

标签: java calculus

我遇到了一个未正确设置最小值的问题。最大值设置完美,但我知道最小值应小于0.运行此片段,似乎永远不会设置最小值。有什么想法吗?

编辑:曲线点应该是-1到3.这是一个图像: The curve

public class FindingExtrema {
    public static void main(String[] args) {
        double lowestPoint = 0;
        double highestPoint = 0;
        double y;

        double x = -1;
        int timesCalculated = 0;

        while (x <= 3) {
            y = run(x);

            if (y < lowestPoint) {
                lowestPoint = y;
                System.out.printf("y: %1$.5f", y);
            }

            if (y > highestPoint) {
                highestPoint = y;
            }

            x += .00001;
            timesCalculated++;
        }

        System.out.println("Done!");
        System.out.printf("Lowest: %1$.5f, Highest: %2$.5f; Calculated %3$d times\n", lowestPoint, highestPoint, timesCalculated);
    }

    private static double run(double x) {
        return Math.cbrt(2 * x) - Math.sqrt(8 * x) + x + 16;
    }
}

3 个答案:

答案 0 :(得分:2)

  

但我知道最小值应该小于0.

如果您绘制图表,则不是。我将你的功能插入谷歌的范围是0到3,最小值是15.431。

答案 1 :(得分:1)

表达式

Math.cbrt(2 * x) - Math.sqrt(8 * x) + x + 16;
对于图表的等式,

并不等同于右边 - 你正在将立方根与立方和方根混淆与平方混淆。

正确的表达是

(2 * x * x * x) - (8 * x * x) + x + 16

答案 2 :(得分:0)

按如下方式设置最低点数。

    double lowestPoint = 1000;

请问你原来的等式吗?你找不到负值的平方根。

SQRT public static double sqrt(double a)

返回double值的正确舍入的正平方根。特殊情况:◦如果参数为NaN或小于零,则结果为NaN。 ◦如果参数为正无穷大,则结果为正无穷大。 ◦如果参数为正零或负零,则结果与参数相同。 否则,结果是最接近参数value的真实数学平方根的double值。参数:a - a value.Returns:a的正平方根。如果参数为NaN或小于零,则结果为NaN。