# general implicit differentiation

Recently i have been helped to write an implicit function differentiator (nice neologism isn't it). Here is the code

def implicit_derivative(V):
var("dw1, dw2")
V_w1 = diff(V, w1)
V_w2 = diff(V, w2)
# Differential
dV = V_w1 * dw1 + V_w2 * dw2
# Dérivée du premier ordre
sol=solve(dV==0, dw2)
impder=(sol/dw1)
return impder


This work without difficulty for $V$ function of $w_1$ and $w_2$. But if my variables are $x$ and $y$ or say $\chi$ and $\zeta$. It will not work. I have not found the mechanism to define a general function not dependant of the name of its arguments. And here there is a second problem to find thway to associate the increase d... to its correlative argument that is if I use $\chi$ as the first variable $d\chi$ must substitute to $dw_1$.

edit retag close merge delete

Sort by » oldest newest most voted

You can see which symbolic variables are used by the input V with V.variables(). Then, you can define the corresponding derivation symbols by looking to their string representation, add the letter 'd' in front of them, and make them symbols with SR.var function. So, the following should work:

def implicit_derivative(V):
w1, w2 = V.variables()
dw1 = SR.var('d{}'.format(w1))
dw2 = SR.var('d{}'.format(w2))
V_w1 = diff(V, w1)
V_w2 = diff(V, w2)
# Differential
dV = V_w1 * dw1 + V_w2 * dw2
# Dérivée du premier ordre
sol=solve(dV==0, dw2)
impder=(sol/dw1)
return impder

more

Thanks. Very nice code. Therer is a little 'bmol' look at the result of this

   χ, ζ =var('chi zeta')
V=function('V')(χ, ζ)
implicit_derivative(V)