Я работаю над кодом, который решает уравнения методом Ньютона. Умеет найти только один из ответов (корни). поэтому я пытаюсь разделить уравнение на x-answer и найти ответ на новое уравнение, которое является еще одним ответом исходного уравнения, но я получаю ошибку:
Traceback (most recent call last):
File "C:\Users\fathollahy\Desktop\w.py", line 26, in <module>
rt = f/WE
TypeError: unsupported operand type(s) for /: 'function' and 'Add'
Вот мой код:
from sympy import *
from random import randrange
x = Symbol('x')
T = input('Eqution: ')
f = eval(T)
f_prime = f.diff(x)
f = lambdify(x, f)
f_prime = lambdify(x, f_prime)
x = randrange(100)
print('attempts:')
while f(x) != 0:
D = f_prime(x)
F = f(x)
Q = F/D
x = x-Q
print(x)
else:
QW = x
print("answer:")
print(QW)
input()
x = Symbol('x')
WE = x-QW
rt = f/WE
rt_prime = rt.diff(x)
rt = lambdify(x, rt)
rt_prime = lambdify(x, rt_prime)
x = randrange(100)
print('attempts:')
while rt(x) != 0:
D = rt_prime(x)
F = rt(x)
Q = F/D
x = x-Q
print(x)
else:
QW = x
print("answer:")
print(QW)
input()
Этот код находит только один ответ и хорошо работает (за исключением ошибок метода Ньютона, таких как x ^ (1/3):
from sympy import *
from random import randrange
x = Symbol('x')
T = input('Eqution: ')
f = eval(T)
f_prime = f.diff(x)
f = lambdify(x, f)
f_prime = lambdify(x, f_prime)
x = randrange(100)
print('attempts:')
while f(x) != 0:
D = f_prime(x)
F = f(x)
Q = F/D
x = x-Q
print(x)
else:
QW = x
print("answer:")
print(QW)
input()