我正在尝试编写一些代码,通过遍历各种起始值(x0)并为每个x0值运行Newton-Raphson方法来查找多项式的根。
我的代码是:
import math
import cmath
a0=input("Enter a value of a0: ")
a1=input("Enter a value of a1: ")
a2=input("Enter a value of a2: ")
a3=input("Enter a value of a3: ")
a4=input("Enter a value of a4: ")
def f(x):
return float(a0)+float(a1)*x+float(a2)*x**2+float(a3)*x**3+float(a4)*x**4
def f1(x):
return float(a1)+2*float(a2)*x+3*float(a3)*x**2+4*float(a4)*x**3
d=0.000005
dx=0
x0=-6
while(x<5):
x0+=1
print("The value of x0 is: ",x0)
for i in range(100):
dx=f(float(x0))/(f1(float(x0)))
x1 = float(x0) - dx
if (abs(float(dx))>float(d)):
print(x1)
x0=x1
else:
break
print("Number of iterations: ",i)
而不是以我想要的x0值(-5到5)开始每次迭代,而while循环总是开始下一个循环,x0等于前一个根的值。这是由于循环结束时x0=x1
。
我该如何解决这个问题?
答案 0 :(得分:2)
您的问题是您尝试同时使用x0用于两个不兼容的目的:循环控制和根目前的猜测。尝试将这些目的分成不同的变量。
guess0 = -6
while(guess0 < 5):
guess0 += 1
x0 = guess0
print("The value of x0 is: ",x0)
...
更好的是,使用for
循环;它们专门针对这个问题而设计:
for guess0 in (-5, 6):
x0 = guess0
print("The value of x0 is: ",x0)
...