数学表达式作为函数的参数?

时间:2013-04-19 10:20:32

标签: python function math

我非常喜欢初学者,所以请保持温和。

我正在修改一些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'的参数。

你会如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分: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等函数的关键参数。

答案 1 :(得分:3)

使用lambda

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