我正在上一门关于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之前,我不知道如何对函数进行“重复调用”。你知道吗
你的职能相当接近,但你有几个问题。要传递参数的默认值,需要在definition语句的第一行中进行。按照你现在写的方式,
tol
总是1e-6
,itmax
总是1000
。你知道吗此外,还应该使用
if
添加对公差的检查。如果差值小于公差,则可以使用break
或return
。break
将中断for
循环,但return
将退出函数并给出一个值。你知道吗相关问题 更多 >
编程相关推荐