在while循环中使用for循环的麻烦

时间:2017-11-23 00:06:48

标签: python for-loop math

我正在尝试编写一些代码,通过遍历各种起始值(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

我该如何解决这个问题?

1 个答案:

答案 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)
    ...