Я полностью новичок в программировании, поэтому скажите, пожалуйста, если ответ на мой вопрос очевиден и очевиден.
Я начал изучать Python неделю назад и изучил основы использования метода Ньютона-Рафсона Для решения уравнений я придумал код, который может дать вам только одно (только) решение кубического уравнения. Вот код, который я разработал: -
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 - текущее предположение. Есть ли лучший способ решить эту проблему без использования сложных функций?
Другой вопрос, который у меня есть: Могу ли я включить положение о предоставлении более одного корня с небольшими изменениями в коде? Одна идея состоит в том, чтобы изменить предположение таким образом, чтобы теперь последовательные итерации приводили к другому корню . Но я не знаю, как сделать такое предположение, учитывая одно решение.