【问题标题】:SciPy Newton MethodSciPy 牛顿法
【发布时间】:2017-05-05 10:17:48
【问题描述】:

我需要找到一个相当复杂的方程的根源,并且我读到 python 有一组可以提供帮助的函数。我试图弄清楚它们是如何工作的,但我失败了。我看到的例子都很简单,我需要找到这个函数的根源:

用 B 和 K 实数正数。有人可以帮忙吗?

【问题讨论】:

  • I tried to figure out how they work but I failed pretty bad 请展示您尝试过的内容并包括您遇到的错误。
  • 不,关键是 B 和 K 是常数,但它们可以根据之前设置的某些参数进行更改。我无法理解如何设置它们。我正在考虑定义一个函数 def f(x,B,K) 但我不知道它是否可以工作。
  • “我正在考虑定义一个函数 def f(x,B,K) 但我不知道它是否可以工作。” 这是标准的做法它与 scipy 优化功能。试一试。

标签: python-2.7 scipy newtons-method


【解决方案1】:

这里有两种解决方案,第二种可能是更简单更正确的解决问题的方法。

诀窍是您必须让函数f 记住K 和B 的值。这样做的一种方法是使其成为另一个函数的内部函数。外部函数用于设置 K 和 B。它们在返回的内部函数的变量范围内。这样内部的f 函数就可以记住这些值。然后将返回的函数简单地传递给 Newton-Raphson 方法,并找到根。

from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np

def get_f(K=1, B=1):
    def f(x):
        return np.exp(-B*(np.power(B, x))-factorial(x)*K)
    return f

f = get_f(K=2, B=3)
print newton(f, 3, maxiter=1000)

一位用户评论说newton 函数有一个args 参数,可用于将额外参数传递给Newton-Raphson 函数。如果函数的形式为 f(x, a, b, c...),那么 a, b, c... 是可以在 args 中给出的额外参数。

同样的解决方案将如下所示:

from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np

def f(x, K, B):
    return np.exp(-B*(np.power(B, x))-factorial(x)*K)

print newton(f, 3, args=(2, 3), maxiter=1000)

【讨论】:

  • "诀窍是你必须让函数 f 记住 K 和 B 的值。" 不需要任何技巧。只需使用newtonargs 参数。
  • 谢谢@WarrenWeckesser,很高兴知道:)
猜你喜欢
  • 2018-02-26
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2020-09-06
  • 2019-06-27
  • 1970-01-01
相关资源
最近更新 更多