找到窦功能的零点

时间:2010-11-03 08:06:40

标签: java function math

我想在java中实现一个找到sin函数空值的函数。我知道该怎么做,但我真的不明白该问题的以下定义:

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

alt text

为什么间隔减半?有什么想法吗?

3 个答案:

答案 0 :(得分:5)

听起来你被要求实施binary search而你可能需要|b-a| < pi,所以区间内有一个唯一的根。顺便说一句,这些在英语中被称为“正弦”和“根”(或“零”)。

这个想法是在你的间隔的终点评估的函数(正弦)将给出一个肯定答案和一个否定答案(如果两者都是正数或两者都是负数,则它会失败)。因为正弦是连续的,所以必须有一个值为零的点(中间值定理)。检查间隔的中点。如果是正数,则从您的区间折叠到负值终点和中点之间的区间。否则,崩溃到另一半。重复此操作,直到您处于所需的零接近范围内。

答案 1 :(得分:1)

提示:如果

,您可以在间隔中至少有一个根
(A) sgn(f(lower_limit) != sgn(f(upper_limit))

如果条件A为真:将间隔减半,iaw:

{[min,max]} -> {[min, (max-min)/2] , ](max-min)/2,max]}

并检查两个子间隔。

在纸上尝试一下(使用图表,将interfals减半并尝试弄清楚,哪个区间是“根容器”的候选者)

答案 2 :(得分:0)

Sinus是由它的频率定义的。在窦的0.5和1期发现零交叉。即sin * pi和* 2pi用于普通的sin码函数。因此,在A和B之间,零交叉都是小于B的小于A的点,等于周期== 1和0.1,使用模数来忽略诸如2,2.5等的值。