我想在java中实现一个找到sin函数空值的函数。我知道该怎么做,但我真的不明白该问题的以下定义:
实现一个在a和b之间的间隔中搜索窦函数中的空点的函数。搜索间隔[下限,上限]应减半,直到下限和上限小于0.0001。
为什么间隔减半?有什么想法吗?
答案 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等的值。