如何在 python 中编写数学序列
How to write mathematical sequences in python
然而,在我们给出的一项练习中,我完全无法完成一项任务,希望有人能帮助我。
以下为实际任务:
Consider the sequence: x(n+1)= 0.2x(n)−α(x(n)^2−5) with x(0)=
1 for α successively equal to -0.5, +0.5, -0.25, +0.25.
Check the convergence; if the sequence converges, print the message Sequence converged to x= (the value you got) otherwise print No convergence detected
Check whether there are negative elements in the sequence
(Hint: If |xn−xn−1| < 10−9 consider a sequence to be convergent)
虽然我不确定如何在 python 中执行序列,但我还没有找到任何可以解释如何通过谷歌搜索的内容,所以到目前为止我一直没有成功。经过无数次尝试,我完全被困住了。
这是我完成的代码:
conv = [-0.5, 0.5, -0.25, 0.25]
b=0
a=conv[b]
c=0
for x in conv:
x1=0.2*x-a*((x**2)-5)
if abs(x1 - x) < 1.e-9:
c += 1
x = x1
b += 1
if c > 0:
print('Sequence converged to x=' + x)
if c === 0:
print('No converge detected')
您需要遍历 "conv" 列表中的值,将它们分配给 a,例如 "for a in conv:"。循环的每次迭代都是一个序列,由不同的 "a" 值定义。然后在该循环内,另一个循环如:
for a in conv:
convergence_determined = False
n = 0
x = 1 # this is x(0) for this sequence
while not convergence_determined:
prev_x = x
n = n += 1
next_x = 0.2 * x - a * (x * x - 5)
x = next_x
if abs(x - prev_x) < 1.e-9:
convergence_determined = True
print('for a = ' + str(a) + ', converged to ' + str(x))
break
# you will need some scheme to identify non-convergence
这不是经过测试的代码,只是为了让您了解如何继续。
该过程称为 'fixed-point iteration'。这个问题类似于 ,昨天(可能还有其他人)问过。
序列定义显示 a
作为常量。事实上,让给定序列按照指示的方式变化是没有意义的,因为它会保证不收敛。讲师的符号很草率,但我确信其目的是让学生 运行 4 次迭代,每个 a1
值一次。 (我这样说也是因为我知道 a
的特定选择说明了哪些定点迭代行为。)
下面的代码混合了我在上面 link 中的回答和这个问题的更新代码。 N 被选择为足够大来解决这个问题(我开始更大)。 Charon,我留给你使用结果来回答导师提出的问题。
for a in [-0.5, 0.5, -0.25, 0.25]:
x = 1.0
n = 30
for i in range(n):
x1 = 0.2*x - a*(x**2 - 5)
print(i, x) # remove before submitting
if abs(x1 - x) < 1.e-9:
print('a = {a}, n = {i}, result is {x}.'.format(a=a, i=i, x=x))
break
x = x1
else:
print('No convergence within {n} iterations.'.format(n=n))
然而,在我们给出的一项练习中,我完全无法完成一项任务,希望有人能帮助我。
以下为实际任务:
Consider the sequence: x(n+1)= 0.2x(n)−α(x(n)^2−5) with x(0)= 1 for α successively equal to -0.5, +0.5, -0.25, +0.25.
Check the convergence; if the sequence converges, print the message Sequence converged to x= (the value you got) otherwise print No convergence detected
Check whether there are negative elements in the sequence
(Hint: If |xn−xn−1| < 10−9 consider a sequence to be convergent)
虽然我不确定如何在 python 中执行序列,但我还没有找到任何可以解释如何通过谷歌搜索的内容,所以到目前为止我一直没有成功。经过无数次尝试,我完全被困住了。
这是我完成的代码:
conv = [-0.5, 0.5, -0.25, 0.25]
b=0
a=conv[b]
c=0
for x in conv:
x1=0.2*x-a*((x**2)-5)
if abs(x1 - x) < 1.e-9:
c += 1
x = x1
b += 1
if c > 0:
print('Sequence converged to x=' + x)
if c === 0:
print('No converge detected')
您需要遍历 "conv" 列表中的值,将它们分配给 a,例如 "for a in conv:"。循环的每次迭代都是一个序列,由不同的 "a" 值定义。然后在该循环内,另一个循环如:
for a in conv:
convergence_determined = False
n = 0
x = 1 # this is x(0) for this sequence
while not convergence_determined:
prev_x = x
n = n += 1
next_x = 0.2 * x - a * (x * x - 5)
x = next_x
if abs(x - prev_x) < 1.e-9:
convergence_determined = True
print('for a = ' + str(a) + ', converged to ' + str(x))
break
# you will need some scheme to identify non-convergence
这不是经过测试的代码,只是为了让您了解如何继续。
该过程称为 'fixed-point iteration'。这个问题类似于
序列定义显示 a
作为常量。事实上,让给定序列按照指示的方式变化是没有意义的,因为它会保证不收敛。讲师的符号很草率,但我确信其目的是让学生 运行 4 次迭代,每个 a1
值一次。 (我这样说也是因为我知道 a
的特定选择说明了哪些定点迭代行为。)
下面的代码混合了我在上面 link 中的回答和这个问题的更新代码。 N 被选择为足够大来解决这个问题(我开始更大)。 Charon,我留给你使用结果来回答导师提出的问题。
for a in [-0.5, 0.5, -0.25, 0.25]:
x = 1.0
n = 30
for i in range(n):
x1 = 0.2*x - a*(x**2 - 5)
print(i, x) # remove before submitting
if abs(x1 - x) < 1.e-9:
print('a = {a}, n = {i}, result is {x}.'.format(a=a, i=i, x=x))
break
x = x1
else:
print('No convergence within {n} iterations.'.format(n=n))