c++ - 如何优化非线性方程的解?

原文 标签 c++ algorithm optimization math assembly

我有非线性方程式,例如:

Y = f1(X)

Y = f2(X)

...

Y = fn(X)

通常,它们没有确切的解决方案,因此我使用Newton's method来解决它们。方法是基于迭代的,我正在寻找优化计算的方法。
有什么方法可以减少计算时间?避免计算平方根或其他数学函数?
也许我应该在C++代码中使用汇编语言(解决方案是用C++编写的)?

最佳答案

非线性最小二乘问题的一种流行方法是Levenberg-Marquardt算法。它是高斯-牛顿法和梯度下降法之间的混合体。它结合了两全其美的优势(在不适当地出现问题的搜索空间中导航并迅速收敛)。但是在实现方面还有很多回旋余地。例如,如果方阵J ^ TJ(其中J是包含所有方程式的所有导数的雅可比矩阵)是稀疏的,则可以使用迭代CG算法快速求解方程组,而不是像J的Cholesky分解那样的直接方法。 ^ TJ或J的QR分解

但是,不要仅仅假设某些部分很慢并且需要用汇编器编写。汇编程序是最后要考虑的事情。在走那条路线之前,您应该始终使用探查器来检查瓶颈在哪里。

相关文章:

c++ - 动态调整组合框的宽度,以便可以显示整个字符串

python - 从Apache日志文件获取Pandas数据框

algorithm - 这个最大集团多项式时间方法的缺陷?

c++ - 返回带有移动捕获的lambda函数

c++ - 具有1个功能的C++ / CLI lib与本机C++静态链接

c++ - C++ 11中不同类型对象的std::array的替代品

python - 如何以最有效的方式翻转数据集?

java - 以最小的空间复杂度找到数组中的最大整数之和

algorithm - 递归公式给出多少排列?

php - 在不杀死服务器的情况下更新用户排名的最佳方法