无法弄清楚该怎么做“呼叫功能,否则”

时间:2017-02-06 00:02:30

标签: python function call

我正在上一门关于python的大学课程,我遇到了一个要求以下内容的作业问题:

使用以下参数编写函数iterate:

f: a function
start: a numeric starting value
tol: a numerical tolerance (default value 1e-6)
itmax: a maximum number of iterations (default value 1000)

从初始值开始,你的函数应该继续重复调用函数(例如y = f(y)),直到f(y)-y的绝对值小于tol或者迭代次数等于itmax。

要检查我的代码是否正确,以下内容应为True

print(approx_equal(iterate(math.sqrt,1.01,tol=1e-4),[6, 1.0000777399813863]))
print(approx_equal(iterate(math.cos,0),[34, 0.7390855263619245]))
print(approx_equal(iterate(math.cos,0,tol=1e-8),[46, 0.7390851366465718]))
print(approx_equal(iterate(math.cos,0,itmax=5),[5, 0.7013687736227565]))

这是我到目前为止所做的:

def approx_equal(f,start,tol,itmax):
    y=start
    tol=1e-6
    itmax=1000
        for i in range(itmax):
                y=f(y)
        while abs(f(y)-y) < tol or i==itmax:
                break

我不确定如何“重复调用函数,直到f(y)-y的绝对值小于tol或迭代次数等于itmax。

1 个答案:

答案 0 :(得分:0)

你的功能非常接近,但你有几个问题。要传递参数的默认值,您需要在定义语句的第一行中执行此操作。目前您编写的方式tol 始终1e-6itmax 始终1000

此外,您应使用if添加针对容差的检查。如果差异小于容差,您可以使用breakreturnbreak会中断for循环,但return会退出该函数并给出一个值。

def approx_equal(f, start, tol=1e-6 ,itmax=1000):
    y = start
    for i in range(itmax):
        y_new = f(y)
        if abs(y_new-y) < tol:
            return y  # return the value when the next iteration is not needed
        else:
            y = y_new