我完全是編程的初學者,所以請告訴我,如果我的問題的答案是非常明顯和明顯的。Newton-Raphson方法求解三次方程
我在一週前開始學習python,學習了使用Newton-Raphson method解決方程式的基礎知識,我想出了一段代碼,可以給你一個三次方程的解(只)。這裏是我設計的代碼: -
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)
一個牛頓法的缺點是,或f'(X)= 0,它給出了一個數學錯誤和崩潰。爲了克服這個問題,我使用g = g + 0.001,如果g的當前值給出零導數,其中g是當前猜測。 有沒有更好的方法來消除這個問題,而不使用複雜的功能?
我的另一個問題是,我可以包括提供多個根並對代碼進行微小更改嗎?一個想法是以這樣的方式改變猜測,即現在連續迭代產生另一個根。但我不知道如何做出這樣的猜測,給出一個解決方案。
這真的是三個問題!要查看工作代碼,請使用http://codereview.stackexchange.com – jonrsharpe
@jonrsharpe我會減少問題的數量。 :) –