Просто назначьте производную переменной и используйте эту переменную там, где вы хотите использовать производную. Примите форму уравнения Ньютона-Рафсона: f(x) = f(x0) + (x - x0)/f'(x0)
. нам нужен f(x)
. Давайте назовем это fx
:
>>> fx = 3*x**2 + 4*x**3
Нам нужна производная. Назовите это f1x:
>>> f1x = fx.diff(x)
Предполагая f(x) = 0
, мы вычисляем x
из x0
как x = x0 - f(x0)/f'(x0)
. Мы будем называть x
xnew
и x0
как x
:
>>> xnew = x - fx/f1x; xnew
x - (4*x**3 + 3*x**2)/(12*x**2 + 6*x)
Для вычисления xnew
из x = 1
вы используете подстановку (при работе с целыми числами) или вычисление с подстановкой в лучше сохранять точность при работе с Float)
>>> xnew.subs(x, 1)
>>> xnew.subs(x,1)
11/18
>>> xnew.n(subs={x:1})
0.611111111111111
Если вам удобнее работать с формой f(x)
, вы можете сделать то же самое, как описано ниже (и здесь я просто покажу шаги):
>>> f = Lambda(x, 3*x**2 + 4*x**3)
>>> f1 = Lambda(x, f(x).diff(x))
>>> xnew = x - f(x)/f1(x); xnew
x - (4*x**3 + 3*x**2)/(12*x**2 + 6*x)
>>> xnew.subs(x, 1)
11/18
В любом случае будьте осторожны, чтобы не использовать x
в качестве переменной Python для чего-либо, кроме символа SymPy x. Если вы это сделаете, вы потеряете (временно и, возможно, загадочно, если вы новичок в Python / SymPy) вашу способность воссоздать f(x)
с x
:
>>> f(x)
4*x**3 + 3*x**2
>>> x = 2
>>> f(x) # now interpreted as f(2)
44
Упс! Давайте x
снова указываем на символ
>>>> from sympy.abc import x
>>> f(x)
4*x**3 + 3*x**2
Примечание: если вы хотите, чтобы несколько производных работали одновременно, вы можете сохранить их в списке и получить к ним доступ по порядку производных:
>>> deriv = [f(x).diff(x, i) for i in range(4)]
>>> deriv[2]
6*(4*x + 1)