Вы получаете бесконечный цикл здесь:
while 0 == 0:
if abs(x1-x2) < .0001:
print x1
break
else:
n = x2 - (func1sub/func1dsub)
x2 = n
if abs(x - n) < .03:
print x
Часть этого цикла, которая имеет значение, выглядит так:
n = x2 - (func1sub/func1dsub)
x2 = n
И ваше условие цикла abs(x1-x2) < .0001
, поэтому давайте перепишем это:
while abs(x1 - x2) >= .0001:
x2 -= (func1sub / func1dsub)
print x1
Так что, возможно, x2 -= (func1sub / func1dsub)
толкает x2
в неправильном направлении. Я бы добавил инструкцию print, подобную этой, и убедился бы, что значения действительно сходятся:
while abs(x1 - x2) >= .0001:
x2 -= (func1sub / func1dsub)
print (x1, x2)
Кроме того, я не очень знаком с методом Ньютона, но в вашем коде func1sub / func1dsub
никогда не меняется, но разве он не должен меняться на каждой итерации?