找到根但不是函数的渐近线

时间:2016-06-20 12:28:23

标签: c++ math

我编写了一个程序,通过各种方法在数字上找到具有非理性根的函数的根。 对于线性插值等方法,你需要找到一个根所在的近似范围,为此我编写了这段代码:

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);
    }
}

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

提前致谢

2 个答案:

答案 0 :(得分:0)

如果函数f(x)收敛于[a,b]内的某个点,那么中间点(a + b) / 2应该比a或{{1}更接近零}}

该观察结果导致以下程序:

b

在此伪代码中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 表示浮点绝对值。

答案 1 :(得分:0)

如果函数具有 nice 属性,并且至少是连续的,那么仅在数字上查找根才有意义。你会怎么看待这个:

f:x - &gt; f(x)定义如下:

  • 2 * i&lt; x&lt; 2 * i + 1(Z的i元素):f(x)= x
  • 2 - i + 1&lt; x&lt; 2 * i(Z的元素):f(x)= - x
  • x = i(Z的元素):f(x)= 1

它在R上完美定义,以任何有界区间为界,在任何大小的间隔上具有正值和负值&gt; 1,并且在任何非整数点上是连续的,但它没有根。

这只是因为根必须存在于段上的规则] x,y [if x&lt; 0&lt; y或y&lt; 0&lt; x仅适用于函数在间隔内连续的情况。

如果你想数字测试函数的连续性,祝你好运......