不知道要为 "call function until otherwise" 做什么
Can't figure out what to do for "call function until otherwise"
我正在 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。
您的功能非常接近,但是您有几个问题。要为参数传递默认值,您需要在定义语句的第一行进行。按照您当前编写的方式,tol
将 始终 为 1e-6
并且 itmax
将 始终 为1000
。
此外,您应该使用 if
添加对公差的检查。如果差异小于容差,您可以使用 break
或 return
。 break
将打破 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
我正在 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。
您的功能非常接近,但是您有几个问题。要为参数传递默认值,您需要在定义语句的第一行进行。按照您当前编写的方式,tol
将 始终 为 1e-6
并且 itmax
将 始终 为1000
。
此外,您应该使用 if
添加对公差的检查。如果差异小于容差,您可以使用 break
或 return
。 break
将打破 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