4

我是一个初学者,所以请温柔一点。

我正在修改一些 Python 练习,我的代码看起来像这样。

def newton(x0, Tol):
    def F(x):
        return (x**3)+898
    def dF(x):
        return 3*x**2
    x=[x0]
    for n in range(400):
        x.append(x[n]-(F(x[n]))/dF(x[n]))
        if abs((x[n+1])-(x[n]))<Tol:
            conv='Converge'
            print n
            break
    if abs((x[n+1])-(x[n]))>=Tol:
        conv='No converge'
    return x[n+1], conv

我定义了一个函数F(x)及其导数dF(x)并将值添加到一个列表中x

任务是检查系列是否收敛,我认为我已经成功了。

但我的问题是关于拥有函数(x**3)+8983*x**2作为函数的参数Newton

我想它会是这样的

def newton(f, df, x0, Tol):
    def F(x):
        return f
    def dF(x):
        return df
    *calculations*
    return x[n+1], conv

你会用它来称呼它

newton((x**3)+898, 3*x**2, x0=something, Tol=something)

以便在过程中定义函数F(x)和。dF(x)

但是,x没有定义,所以它不起作用。

请注意,在练习中需要将 f 和 df 作为 'newton' 的参数。

你将如何解决这个问题?

谢谢。

4

2 回答 2

6

您可以使用lambdas,它们基本上是简单的功能。

你可以这样称呼它:

newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something)

这与执行以下操作相同:

def f1(x):
    return (x**3)+898
def f2(x):
    return 3*x**2
newton(f1, f2, x0=something, Tol=something)

唯一的区别是你没有“给 lambda 起一个名字”,即将它分配给一个变量。这对于只需要使用一次的函数很方便,尤其是作为函数的关键参数,如sortedmax

于 2013-04-19T10:22:56.833 回答
3

使用lambda

newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something)
于 2013-04-19T10:22:30.087 回答