Would it be possible to define a tree of equations as:

root: f(x)=f1(x)*f3(x)
leaf 1: f1(x)=...
leaf 0: f3(x)=...+f2(x)
leaf 00: f2(x)=...

or equivalently

       leaf 1
     /
root
     \
       leaf 0
             \
               leaf 00


and then recurse the tree by applying the diff operator to the current
equation?

Thanks
V



On Apr 5, 2:31 am, Chris Smith <[email protected]> wrote:
> The following might get you started:
>
> def difcse(cse, x, n=1):
>     r, e = cse
>     nreps = len(r)
>     diffs = []
>     for i in range(nreps):
>         v, ri = r[i]
>         dri = simplify(ri.diff(x, n))
>         if dri:
>             func = Symbol('d_'+v.name+'_d'+x.name+
>             str(n if n>1 else ''))
>             r.append((v, func(x)))
>             diffs.append((r[-1][1].diff(x, n), func, dri))
>     if len(r) > nreps:
>         derivs = r[nreps:]
>         for j in range(len(e)):
>             e[j] = e[j].subs(derivs).diff(x, n).subs(
>             [d[:2] for d in diffs]).subs(
>             [(b, a) for a, b in r[nreps:]])
>         for j in range(nreps, len(r)):
>             i = j - nreps
>             r[j] = diffs[i][-2:]
>     return r, e
>
> >>> re = cse(cos(x+y)*(x**2+1)+exp((x+y)/(x**2+1)))
> >>> print difcse(re, x, 1)
>
> ([(x0, x + y), (x1, x**2 + 1), (d_x0_dx, 1), (d_x1_dx, 2*x)],
> [-d_x0_dx*x1*sin(x
> 0) + d_x1_dx*cos(x0) + (d_x0_dx/x1 - d_x1_dx*x0/x1**2)*exp(x0/x1)])>>> re = 
> cse(cos(x+y)*(x**2+1)+exp((x+y)/(x**2+1)))
> >>> print difcse(re, x, 2)
>
> ([(x0, x + y), (x1, x**2 + 1), (d_x1_dx2, 2)],
> [-d_x1_dx2*x0*exp(x0/x1)/x1**2 +
> d_x1_dx2*cos(x0) + x0**2*exp(x0/x1)*Derivative(x1, x)**2/x1**4 +
> 2*x0*exp(x0/x1)
> *Derivative(x1, x)**2/x1**3])
>
> Notice that when taking the second derivative, some first derivatives
> remain, so perhaps the difcse (which modifies the cse result in place)
> should also always include the first derivative if n > 1.
>
> /c

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to