Re: [sympy] How to avoid automatic xi symbols appearing with diff of chained functions
doit() was the answer thanks! (Doesn't crash for me v1.4) Le samedi 24 août 2019 20:20:13 UTC-4, Oscar a écrit : > > I would say that you should use doit but I just tried that and it crashed: > > In [*9*]: e=Function('g')(Function('f')(x1,x2),Function('h' > )(x1,x2)).diff(x1) > > > In [*10*]: e > > > Out[*10*]: > > ⎛ ∂ ⎞│⎛ ∂ ⎞│ ⎛ > ∂ ⎞│ ⎛ ∂ > > ⎜───(f(ξ₁, x[2]))⎟│ ⋅⎜───(g(ξ₁, h(x[1], x[2])))⎟│ + > ⎜───(g(f(x[1], x[2]), ξ₂))⎟│⋅⎜───(h(ξ₁ > > ⎝∂ξ₁ ⎠│ξ₁=x[1] ⎝∂ξ₁ ⎠│ξ₁=f(x[1], x[2]) > ⎝∂ξ₂ ⎠│ξ₂=h(x[1], x[2]) ⎝∂ξ₁ > > > ⎞│ > > , x[2]))⎟│ > > ⎠│ξ₁=x[1] > > > In [*11*]: e.doit() > > > Fatal Python error: Cannot recover from stack overflow. > > > Thread 0x7994b000 (most recent call first): > > File "/Users/enojb/.local/lib/python3.5/threading.py", line 293 in wait > > File "/Users/enojb/.local/lib/python3.5/threading.py", line 549 in wait > > File > "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py", > > line 829 in run > > File > "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py", > > line 58 in needs_sqlite > > File > "", > > line 2 in run > > File "/Users/enojb/.local/lib/python3.5/threading.py", line 914 in > _bootstrap_inner > > File "/Users/enojb/.local/lib/python3.5/threading.py", line 882 in > _bootstrap > > > Current thread 0x7fffae5cf380 (most recent call first): > > File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 284 > in assumptions0 > > File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 274 > in _hashable_content > > File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 381 > in _hashable_content > > File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 133 in > __eq__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 343 > in __eq__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/containers.py", line > 97 in __eq__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 134 in > __eq__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in > wrapper > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2291 in > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2291 in _hashable_content > > File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 109 in > __hash__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2286 in __hash__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in > wrapper > > File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 196 in > __mul__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line > 129 in binary_op_wrapper > > File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line > 91 in __sympifyit_wrapper > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 618 in _eval_derivative > > File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1724 > in _visit_eval_derivative_scalar > > File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1719 > in _accept_eval_derivative > > File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1743 > in _eval_derivative_n_times > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1427 in __new__ > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1598 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1600 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1600 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1600 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 1600 in doit > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > ... > > File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line > 2242 in doit > > File
Re: [sympy] How to avoid automatic xi symbols appearing with diff of chained functions
I would say that you should use doit but I just tried that and it crashed: In [*9*]: e=Function('g')(Function('f')(x1,x2),Function('h' )(x1,x2)).diff(x1) In [*10*]: e Out[*10*]: ⎛ ∂ ⎞│⎛ ∂ ⎞│ ⎛ ∂ ⎞│ ⎛ ∂ ⎜───(f(ξ₁, x[2]))⎟│ ⋅⎜───(g(ξ₁, h(x[1], x[2])))⎟│ + ⎜───(g(f(x[1], x[2]), ξ₂))⎟│⋅⎜───(h(ξ₁ ⎝∂ξ₁ ⎠│ξ₁=x[1] ⎝∂ξ₁ ⎠│ξ₁=f(x[1], x[2]) ⎝∂ξ₂ ⎠│ξ₂=h(x[1], x[2]) ⎝∂ξ₁ ⎞│ , x[2]))⎟│ ⎠│ξ₁=x[1] In [*11*]: e.doit() Fatal Python error: Cannot recover from stack overflow. Thread 0x7994b000 (most recent call first): File "/Users/enojb/.local/lib/python3.5/threading.py", line 293 in wait File "/Users/enojb/.local/lib/python3.5/threading.py", line 549 in wait File "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py", line 829 in run File "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py", line 58 in needs_sqlite File "", line 2 in run File "/Users/enojb/.local/lib/python3.5/threading.py", line 914 in _bootstrap_inner File "/Users/enojb/.local/lib/python3.5/threading.py", line 882 in _bootstrap Current thread 0x7fffae5cf380 (most recent call first): File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 284 in assumptions0 File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 274 in _hashable_content File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 381 in _hashable_content File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 133 in __eq__ File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 343 in __eq__ File "/Users/enojb/current/sympy/sympy/sympy/core/containers.py", line 97 in __eq__ File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 134 in __eq__ File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in wrapper File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2291 in File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2291 in _hashable_content File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 109 in __hash__ File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2286 in __hash__ File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in wrapper File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 196 in __mul__ File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line 129 in binary_op_wrapper File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line 91 in __sympifyit_wrapper File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 618 in _eval_derivative File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1724 in _visit_eval_derivative_scalar File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1719 in _accept_eval_derivative File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1743 in _eval_derivative_n_times File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1427 in __new__ File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1598 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit ... File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242 in doit File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600 in doit ... Abort trap: 6 On Sun, 25 Aug 2019 at 01:13, Mathieu Lamarre wrote: > Simple example of multivariate chain rule: > print(Function('g')(Function('f')(x1,x2)).diff(x1)) > > Gives the expected: > > [image: diff1.PNG] > > Derivative(f(x1, x2), x1)*Derivative(g(f(x1, x2)), f(x1, x2)) > > > Adding another function h: > > print(Function('g')(Function('f')(x1,x2),Function('h')(x1,x2)).diff(x1)) > > Gives the expected answer but with extra _xi_1 and _xi_2 symbols: > > [image: diff.PNG] > > Derivative(f(x1, x2), x1)*Subs(Derivative(g(_xi_1, h(x1, x2)), _xi_1), _xi_1, > f(x1, x2)) + Derivative(h(x1, x2), x1)*Subs(Derivative(g(f(x1, x2), _xi_2), > _xi_2), _xi_2, h(x1, x2)) > > >
[sympy] How to avoid automatic xi symbols appearing with diff of chained functions
Simple example of multivariate chain rule: print(Function('g')(Function('f')(x1,x2)).diff(x1)) Gives the expected: [image: diff1.PNG] Derivative(f(x1, x2), x1)*Derivative(g(f(x1, x2)), f(x1, x2)) Adding another function h: print(Function('g')(Function('f')(x1,x2),Function('h')(x1,x2)).diff(x1)) Gives the expected answer but with extra _xi_1 and _xi_2 symbols: [image: diff.PNG] Derivative(f(x1, x2), x1)*Subs(Derivative(g(_xi_1, h(x1, x2)), _xi_1), _xi_1, f(x1, x2)) + Derivative(h(x1, x2), x1)*Subs(Derivative(g(f(x1, x2), _xi_2), _xi_2), _xi_2, h(x1, x2)) This is annoying for subsequent substitutions, for instance to switch from the function notation to simple symbols. Also, for more complex equations, the numbering of the automatic xi symbols is hard to predict. Is there a way to change this behavior? i.e. do not get the Subs and _xi_%d above Thanks -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/b8b84555-2132-430c-be51-b0c47d99e3bb%40googlegroups.com.