我有非线性方程式,例如:
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分解
但是,不要仅仅假设某些部分很慢并且需要用汇编器编写。汇编程序是最后要考虑的事情。在走那条路线之前,您应该始终使用探查器来检查瓶颈在哪里。