我参加了一个初级蟒蛇课,我们获得的一部分练习就是:
具有属性x = sin(x)-ax + 30的点x被称为函数f(x)= sin(x)-ax + 30的固定点。它可以用所谓的固定点计算迭代:x(i + 1)= sin(x(i)) - ax(i)+ 30,其中上标(i)表示迭代计数器。在这里,您可以找到一段Python代码,它执行此
的前200个步骤
x=0.5
a=0.5
for i in range(200):
x = sin(x) - a*x + 30
print('The result after {num} iterations is {res}.'.format(num=i, res=x))
修改代码,使其在| x(i + 1)-x(i)|之后立即停止迭代< 10-8。此外,如果在200次迭代步骤中未满足此条件,则应打印一条消息。使用= 0.5和a = 8
测试代码
我已经尝试过这样做,但我没有随处可见。这就是我到目前为止,我们非常感谢任何帮助。
x = 0.5
a = 8
iterations = 0
for i in range(y):
x = sin(x) - a*x + 30
if abs(x**(i+1) - x**i) < 1.e-8:
break
elif i > 200:
iterations += 1
print('The result after {num} iterations is {res}.'.format(num=i, res=x))
if iterations > 0:
print('The condition was not met within 200 iteration steps.')
答案 0 :(得分:1)
为了看看迭代过程中发生了什么,我建议在原始代码中(在用所需的缩进校正后)或代码中将print(i, x)
添加到循环中。您可以在提交之前将其删除。
原始代码和您的代码缺少from math import sin
。发布的代码应该可以运行,包括所需的导入。
您发布的代码忽略了定义y=200
,但没有必要为指定的问题添加该代码。在任何情况下,for i in range(y)
都会给出值0,1,...,199。您的条件i > 200
永远不会成立。如果循环不中断,最简单的方法是使用else:
子句。或者,您可以将iterations
替换为更具描述性的failure
,并更正您的情况。
结合Tom K的评论,可行的代码是
from math import sin
x = 0.5
a = 0.5
for i in range(200):
x1 = sin(x) - a*x + 30
print(i, x) # remove before submitting
if abs(x1 - x) < 1.e-8:
break
x = x1
else:
print('The condition was not met within 200 iteration steps.')
print('The result after {num} iterations is {res}.'.format(num=i, res=x))
打印a = .5和8:
The result after 59 iterations is 20.649274368307022.
The condition was not met within 200 iteration steps.
The result after 199 iterations is -1.1949487767945635e+181.