c++ - 快速二次最小化器

标签 c++ optimization algebra quadratic

给定一个二次函数,即 f(x) = ax^2 + bx + c,在 [ 中找到 x 的最快方法是什么-1, 1] 最小化 f(x)

到目前为止,这是我提出的功能:

double QuadraticMinimizer(double a, double b, double c) {   
    double x = 1 - 2*(b > 0);
    if (a > 0) {
        x = -b/(2*a);
        if (fabs(x) > 1)
            x = Sign(x);
    }
    return x;
}

有没有可能做得更好?

最佳答案

没有“最快的方法”,因为运行时间取决于特定的机器和输入参数的特定分布。此外,您可以从初始代码中删除的内容不多。

如果极值 -b/2a 的位置经常落在区间 [-1,1] 之外,您可以在这些情况下避免除法。

如果允许从浮点表示中破解符号位以实现快速的abssgnsetsgn 函数,您可以使用类似的东西

a*= -2;
if (hack_abs(b) >= hack_abs(a))
  return hack_setsgn(1, hack_sgn(a) ^ hack_sgn(b));

return b / a;

您还可以尝试使用更便携的 copysign 函数。

关于c++ - 快速二次最小化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682366/

相关文章:

c++ - 段错误,C++,g++,

内联函数的 C++ 作用域

python - 如何优化 100000 次迭代的 python 循环?

javascript - 代数项的展开

sql-server - TSQL代数-求解x((a)x <b)

c++ - 目标文件中 undefined reference - 如何找到哪个库包含它?

c++ - 为每个测试用例或整个测试套件调用谷歌测试函数 setup() 和 teardown()

java - (Java) 我的入门冒泡排序的效率

mysql - 为什么这个查询不使用 ORDER BY 索引?

c - 线性时间内的完美功率检测