通过递归找到零点

Upv*_*ote 0 java math recursion binary-search

我想找到正弦函数的零点.参数是区间[a,b].我必须与二进制搜索类似.

实现一个在a和b之间的间隔中搜索窦函数中的空点的函数.搜索间隔[下限,上限]应减半,直到下限和上限彼此小于0.0001.

这是我的代码:

public class Aufg3 {
    public static void main(String[] args) {

        System.out.println(zeropoint(5,8));
    }

    private static double zeropoint(double a, double b){
        double middle = (a + b)/2;

        if(Math.sin(middle) < 0){
            return zeropoint(a,middle);
        }else if(Math.sin(middle) > 0){
            return zeropoint(middle,b);
        }else{
            return middle;
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

它在返回零点(中间,b)的行上给了我很多错误;

在第一步中,我想找到间隔中的第一个零点.

有任何想法吗?

Jer*_*myP 6

每个人都忽视的基本问题:

  • 我们并不总是想要返回一个结果(想象一下在pi/4和3pi/4之间找到正弦函数的零点,没有任何结果).
  • 在任意范围内,可能有几个零.

显然,需要的是一组(可能是空的)值.

所以函数的伪代码真的要求(不使用Java,因为这是作业):

Set zeropoint(double a, double b)
{
    double middle = mid point of a and b;
    if a and be less than 0.0001 apart
    {
        if (sin(a) and sin(b) are on opposite sides of 0)
        { 
            return set containing middle
        }
        else
        {
            return empty set
        }
    }
    else
    {
        return union of zeropoint(a, middle) and zeropoint(middle, b)
    }
} 
Run Code Online (Sandbox Code Playgroud)