我编写了一个程序,通过各种方法从数字上找到具有不合理根的函数的根。
对于线性插值之类的方法,您需要找到根所在的大致范围,为此,我编写了以下代码:

bool fxn1 = false;
bool fxn2 = false;
vector<float> root_list;

if(f_x(-100) < 0)
{
    fxn2 = true;
}
for(float i = -99.99; i < 100.01; i += 0.01)
{

    fxn1 = fxn2;
    if(f_x(i) < 0)
    {
        fxn2 = true;
    }
    else
    {
        fxn2 = false;
    }
    if((fxn1 == false && fxn2 == true) || (fxn1 == true && fxn2 == false))
    {
        root_list.push_back(i-0.01);
        root_list.push_back(i);
    }
}


但是,对于非连续函数(即具有渐近线的函数),当函数在渐近线的任一侧从正值转换为负值时也会触发此代码。
有没有一种方法可以让程序分辨出根和渐近线之间的区别?

提前致谢

最佳答案

如果函数f(x)收敛于[a,b]内部的点,则中途点(a + b) / 2应当比ab接近零。

此观察结果导致以下过程:

Let mid = (a + b) / 2
If |f(mid)| < |f(a)| AND |f(mid)| < |f(b)| Then
   Algorithm has converged to a root
Else
   Algorithm has converged to an asymptote
End


在该伪代码中,|.|表示浮点绝对值。

10-08 12:04