Soy un novato aprendiendo Python. Tengo una pregunta, ¿pueden ayudarme? Este es mi código:
from sympy import * def test(f, g, a): f1 = f.subs(x, g) df1 = diff(f1, x).subs(x, a) return df1 print(test((2*(x**2) + abs(x + 1)), (x - 1), -1)) Result: -Subs(Derivative(re(x), x), x, -1) - 8 Estoy tomando la derivada de f(g(x)) con: f = 2(x^2) + abs(x + 1) , g = x - 1 y x = -1 . Cuando uso diff para calcular el resultado es -Subs(Derivative(re(x), x), x, -1) - 8 , pero cuando uso la fórmula lim x->x0 (f(x) - f(x0))/(x - x0) el resultado -9 . También intenté usar una calculadora para calcular y el resultado -9 es el resultado correcto. ¿Hay alguna manera de hacer que diff devuelva -9? ¿Alguien tiene alguna ayuda o puede dar algunos consejos?
¡Gracias!
Cada vez que veo aparecer un re o un im cuando no los esperaba, me inclino a hacer que los símbolos sean reales:
>>> from sympy import * >>> def test(f, g, a): ... f1 = f.subs(x, g) ... df1 = diff(f1, x).subs(x, a) ... return df1 ... >>> var('x',real=True) x >>> print(test((2*(x**2) + abs(x + 1)), (x - 1), -1)) -9Como todavía soy relativamente principiante en sympy , me gusta ver resultados intermedios (incluso me gusta hacerlo con numpy , que conozco mucho mejor). Corriendo en isympy :
In [6]: diff(f1,x) Out[6]: ⎛ dd ⎞ ⎜re(x)⋅──(re(x)) + im(x)⋅──(im(x))⎟⋅sign(x) ⎝ dx dx ⎠ 4⋅x - 4 + ─────────────────────────────────────────── x Esa expresión contiene d/dx sin evaluar y la distinción entre las partes real e imaginaria de x .
Restringir x a real como se sugiere en la otra respuesta produce:
In [19]: diff(exp,x) Out[19]: 4⋅x + sign(x + 1)