版权声明:博主的博客不值钱随便转载但要注明出处 https://blog.csdn.net/easylovecsdn/article/details/84404490
先上总结,紧跟代码,后上讲解
总结
之前总结不完整,完整的以后敬上
Python代码(重修订)
注:代码中的下标正好与上面推论中的相反
import cmath
import math
def f(x):
return x ** 5 - 3.5 * x ** 4 + 2.75 * x ** 3 + 2.125 * x ** 2 - 3.875 * x + 1.25
rate = 0.01
r = s = -1
a = [1, -3.5, 2.75, 2.125, -3.875, 1.25]
b = []
c = []
def deal() :
for i in range(len(b)) :
a[i] = b[i]
del a[len(a) - 2 : len(a)]
flag= 0
for k in range(9999):
size = len(a)
del b[0: len(b)]
b.append(a[0])
b.append(a[1] + r * b[0])
for i in range(2, size):
b.append(a[i] + r * b[i - 1] + s * b[i - 2])
del c[0: len(c)]
c.append(b[0])
c.append(b[1] + r * c[0])
for i in range(2, size - 1):
c.append(b[i] + r * c[i - 1] + s * c[i - 2])
R = (b[size - 2] * c[size - 3] - b[size - 1] * c[size - 4]) / (c[size - 2] * c[size - 4] - c[size - 3] * c[size - 3])
S = (b[size - 1] * c[size - 3] - b[size - 2] * c[size - 2]) / (c[size - 2] * c[size - 4] - c[size - 3] * c[size - 3])
r += R
s += S
er = math.fabs(R / r)
es = math.fabs(S / s)
if er <= rate and es <= rate:
x = (r + cmath.sqrt(r * r + 4 * s)) / 2
print(x)
x = (r - cmath.sqrt(r * r + 4 * s)) / 2
print(x)
if flag == 1 :
print(-b[1] / b[0])
break
deal()
flag = 1
输出结果
与答案正好匹配
讲解