不知道“在其他情况下调用函数”该怎么办

2024-04-26 11:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在上一门关于python的大学课程,我被一个作业问题困住了,这个问题要求如下:

使用以下参数编写函数迭代:

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。你知道吗

为了检查我的代码是否正确,以下应该是正确的

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之前,我不知道如何对函数进行“重复调用”。你知道吗


Tags: 函数defaultvaluemathequalcos次数start
1条回答
网友
1楼 · 发布于 2024-04-26 11:34:58

你的职能相当接近,但你有几个问题。要传递参数的默认值,需要在definition语句的第一行中进行。按照你现在写的方式,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

相关问题 更多 >