【问题标题】:Solve a pair of coupled nonlinear equations within certain limits在一定限度内求解一对耦合非线性方程
【发布时间】:2015-12-09 20:38:46
【问题描述】:

This answerthis question 仅适用于耦合函数的所需解不限于特定范围的情况。

但是,例如,如果我们想要0 < x < 100 < y < 10 这样的解决方案呢?另一种思考方式是,如果 xy 小于零时耦合函数未定义怎么办?

scipy.optimize 中有一些函数可以在给定区间内找到函数的根(例如,brentq),但这些函数仅适用于一个变量的函数。

为什么scipy 没有提供适用于特定范围内的多变量函数的根求解器?如何实现这样的求解器?

【问题讨论】:

  • 您需要像 Newton Raphson 或 BFGS 这样的非线性求解器。它变成了一个线性代数问题,无法保证有解。
  • @duffymo 我想无论是否给出限制都不能保证解决方案。为什么将解决方案限制在一定范围内需要一个全新的算法?为什么不能调整像 fsolve 这样的 scipy 函数来限制?你能指点我这方面的参考吗?
  • @duffymo 嗯,这没有回答我的问题,但我想我可以在那个 SE 网站上问我的问题——可能更有可能得到我的答案。

标签: python optimization scipy solver nonlinear-optimization


【解决方案1】:

这在算法上是不平凡的。未来的 scipy 版本可能会有这种套路。

今天,您可以将求根问题转化为最小二乘问题(最小化 lhs 的平方和),并使用the master branch of the scipy Git repo

编辑:scipy.optimize.least_squares 在已发布的 scipy 中可用很长时间了(在 2015 年被问到这个问题时不是这样)。

【讨论】:

  • 我也不清楚如何将我的问题(我链接到的问题中的问题)转换为最小二乘问题,或者如何在您链接到的拉取请求中使用代码(其主要焦点似乎与我的问题不同)。你能给我一些指导吗?
  • 就像我说的:考虑方程左侧的平方和。这仅等于零当且仅当两个 l.h.s.是零,这是最小值。
  • 啊,是的,这是有道理的。 (您最初的回答中有一个错字让我失望。)但这并没有回答我的第二个问题——我将如何使用您链接到的代码来解决这个问题? (您已链接到 scipy 中 15 个不同文件的更改。)
  • 您需要克隆 scipy 的开发版本,查看我上面链接的 PR,从源代码构建它,例如按照least_squares 文档字符串中的示例进行操作。或者等到它被合并并发布:-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 2021-06-14
  • 2017-05-29
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多