如何在 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))