java函数的方法极值

问题描述 投票:-1回答:2

我决定通过Fibonacci方法计算函数的极值,我是一个初学者,我在代码中遇到了一些错误,如果不难帮助正确地编写代码来确定最小值和最大值,那么输出- 2,借助黄金分割计算结果,结果为1.55。

public class Fibonacci {
     double func(double x){
            return Math.pow(x,3)-26*x+6*Math.pow(x, 2)-9;
        } 
     double findMininFibonacci(double range_min_0, double range_min_1, double eps_min){
            double x1, x2;
            double N;   
            int j=10;
            int[] f = new int[j];
            f[0] = 1;
            f[1] = 1;
            f[3] = 2;
            f[4] = 3;
            double h_min;
            double x3;
            double x4;  
            while ((range_min_1-range_min_0)>eps_min){                  
                for (int i = 4; i < j; ++i) {
                    N = (range_min_1-range_min_0)/eps_min;
                  f[i] = f[i - 1] + f[i - 2];   
                  x1 = range_min_0 + (f[i-2]/f[i])*(range_min_1-range_min_0);
                  x2 = range_min_0 + (f[i-1]/f[i])*(range_min_1-range_min_0);               
                if(func(x1)<=func(x2)) {
                    range_min_1 = x2;
                    x2 = x1;
                    x1 = range_min_0 + (f[i-3]/f[i-1])*(range_min_1-range_min_0);
                } else {        
                    range_min_0 = x1;
                    x1 = x2;
                    x2 = range_min_0 + (f[i-2]/f[i-1])*(range_min_1-range_min_0);}              
                }              
            }       

            return (range_min_0 + range_min_1) / 2;
     }
java
2个回答
1
投票

双精度和整数运算的混合看起来很可疑。具体而言,(f[i-2]/f[i])表示整数除法,请参阅Java Language and Virtual Machine Specifications, 15.17. Multiplicative Operators。这意味着结果将四舍五入。


1
投票

替换

int[] f = new int[j];

with

double[] f = new double[j];

[整数除法截断小数部分,例如]

public class Main {
    public static void main(String[] args) {
        int x = 3, y = 4;
        System.out.println(x / y);
    }
}

输出,

0

public class Main {
    public static void main(String[] args) {
        double x = 3, y = 4;
        System.out.println(x / y);
    }
}

输出,

0.75
© www.soinside.com 2019 - 2024. All rights reserved.