minimization - 如何使用牛顿法找到非线性多元函数的最小值(代码不是线性代数)

标签 minimization newtons-method nonlinear-functions

我正在尝试进行一些参数估计,并希望选择最小化预测方程中的平方误差的参数估计 超过大约 30 个变量 .如果方程是线性的,我只需计算 30 个偏导数,将它们全部设置为零,然后使用线性方程求解器。但不幸的是方程是非线性的 它的衍生物也是如此。

如果方程是在单个变量上,我将只使用 Newton's method (也称为牛顿-拉夫森)。网络上有丰富的示例和代码来实现牛顿单变量函数的方法。

鉴于我有大约 30 个变量,我如何使用牛顿法为这个问题编写数字解决方案 ?我有封闭形式的方程,可以计算一阶和二阶导数,但我不知道如何从那里开始。我在网上找到了大量的处理方法,但它们很快就变成了重矩阵表示法。我找到了 something moderately helpful在维基百科上,但我无法将其翻译成代码。

我担心分解的地方在于矩阵代数和矩阵求逆。我可以使用线性方程求解器反转矩阵,但我担心获得正确的行和列,避免转置错误等。

确切地说:

  • 我想使用将变量映射到它们的值的表。我可以编写这样一个表的函数,该函数返回给定这样一个表作为参数的平方误差。我还可以创建返回关于任何给定变量的偏导数的函数。
  • 我对表中的值有一个合理的初始估计,所以我不担心收敛。
  • 我不确定如何编写使用估计值(每个变量的值表)、函数和偏导函数表来生成新估计值的循环。

  • 最后一点是我想要帮助的。任何直接帮助或指向良好来源的指针将受到热烈欢迎。

    编辑:由于我有封闭形式的一阶和二阶导数,我想利用它们并避免更慢的收敛方法,如单纯形搜索。

    最佳答案

    您可以在 C 语言的数字食谱网页中找到您需要的内容。有一个free version available online . Here (PDF) 是包含用 C 实现的 Newton-Raphson 方法的章节。您可能还想查看 Netlib 中提供的内容。 (LINPack 等人)。

    关于minimization - 如何使用牛顿法找到非线性多元函数的最小值(代码不是线性代数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/392173/

    相关文章:

    chess - 棋盘上骑士的最短路径

    algorithm - 最小化动态 'metric' 的生成树

    r - 在 R 的 nnls 中实现额外的约束

    c - 段错误(Malloc?)

    z3 非线性约束超时

    java - Java中非线性方程的最大化

    java - Java中通过调整输入参数来最小化迭代次数

    r - R中的牛顿法

    c - 牛顿法程序(C语言)无限循环运行

    signal-processing - 正弦表插值