我完全是编程初学者,因此请告诉我我的问题的答案是否非常明显。
一周前我开始学习 python,并且在学习了使用Newton-Raphson 方法求解方程的基础知识后,我想出了一段代码,它可以为你提供至少(仅)一个三次方程的解。这是我设计的代码:-
def deg3(a,b,c,d,g):
y=a*g**3+b*g**2+c*g+d
return y
def solvedeg3equation():
e=float(input("e= ")) #for ax^3+bx^2+cx+d=0, with maximum error of e
a=float(input("a= "))
b=float(input("b= "))
c=float(input("c= "))
d=float(input("d= "))
count=1
g=0.01
while abs(deg3(a,b,c,d,g))>e and count<=100:
count=count+1
if 3*a*g**2+2*b*g+c==0:
g=g+0.001
g=g-deg3(a,b,c,d,g)/(3*a*g**2+2*b*g+c)
if count<=100:
print("The best guess is:",g)
print("iterations required: ",count)
else:
print("maximum iterations exceeded ")
print("iterations: ",count,"current guess: ",g)
牛顿法的缺点之一是 or f'(x)=0,它会给出数学错误并崩溃。为了克服这个问题,我使用 g=g+0.001,如果 g 的当前值给出零导数,其中 g 是当前猜测。有没有更好的方法来消除这个问题,而不使用复杂的功能?
我的另一个问题是,我是否可以包括提供多个根目录并对代码进行微小更改?一个想法是以这样一种方式改变猜测,即现在连续的迭代带来另一个根。但我不知道如何做出这样的猜测,给出一个解决方案。