c++ - 求函数的根但不求渐近线

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

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

提前致谢

最佳答案

如果函数 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

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

关于c++ - 求函数的根但不求渐近线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922607/

相关文章:

C++从文件的多个部分读取速度太慢

c++ - 复制字符串直到 '.' 以及当我知道结构时如何只复制数字

math - 马尔可夫链与有限状态机相同吗?

java - Java中的整数除法

javascript - 取钱有困难吗?

c++ - 双与位运算的算术

math - 将直线旋转给定角度

c++ - 使用内联汇编器时编译器的详细输出?

C++类私有(private)访问修饰符

c++ - Term 不计算为采用三个参数的函数