A Combinatorics Problem - Product Rule Indices

i like this post (click again to cancel)
1
i dont like this post (click again to cancel)

I have a particular combinatorics problem where I would like to generate lists that look like this:

  • (n=1): [[1],[]], [[],[1]]
  • (n=2): [[1,2],[]], [[1],[2]], [[2],[1]], [[],[1,2]]
  • (n=3): [[1,2,3],[]], [[1,2],[3]], [[1,3],[2]], [[2,3],[1]], [[1],[2,3]], [[2],[1,3]], [[3],[1,2]], [[],[1,2,3]]

These sorts of combinations come from taking derivatives with respect to different variables of a product of two functions. Using subscripts $1,2,3$ to denote differentiation with respect to the variables $z_1,z_2,z_3$, respectively, I'm looking at computations of the form:

  • $\partial_{z_1} (fg) = f_1g + f g_1$
  • $\partial_{z_1} \partial_{z_2} (fg) = f_{12}g + f_1 g_2 + f_2 g_1 + f g_{12}$
  • $\partial_{z_1} \partial_{z_2} \partial_{z_3} (fg) = f_{123}g + f_{12}g_3 + f_{13}g_2 + f_{23}g_1 + f_1g_{23} + f_2g_{13} + f_3g_{12} + f g_{123}$

Is there a quick way to generate such a list in Sage? I'm not actually looking to perform these symbolic derivatives. I just used the differentiation to demonstrate where these combinations come from. (And check with you whether or not I'm computing them correctly.)

asked Dec 07 '10

cswiercz gravatar image cswiercz
839 6 17 33
http://www.cswiercz.info/
i like this answer (click again to cancel)
2
i dont like this answer (click again to cancel)

I solved my own problem. The solution uses the function partitions_set. However, it only generates half of the derivatives I want. The other half is obtained by transposing / reversing the outputs:

sage: derivs = [1,2]
sage: for s in partitions_set(derivs,2):
          print s
          s.reverse()
          print s
[[1], [2]]
[[2], [1]]
sage: s = [derivs, []]; print s
[[1, 2], []]
sage: s.reverse(); print s
[[], [1, 2]]

For the case when $n=3$ I get what I want as well:

sage: derivs = [1,2,3]
sage: for s in partitions_set(derivs,2):
          print s
          s.reverse()
          print s
[[1], [2, 3]]
[[2, 3], [1]]
[[1, 2], [3]]
[[3], [1, 2]]
[[1, 3], [2]]
[[2], [1, 3]]
sage: s = [derivs, []]; print s
[[1, 2, 3], []]
sage: s.reverse(); print s
[[], [1, 2, 3]]

At the risk of sounding full of myself I'm going to answer my own question. Thanks to everyone who thought about it, though.

link

posted Dec 07 '10

cswiercz gravatar image cswiercz
839 6 17 33
http://www.cswiercz.info/
what if we make questions appear anonymous? Evgeny (Dec 07 '10)
I'm not sure if that's necessary. I just didn't want to appear that I was spamming ask.sage or trying to increase my karma. I was also, in part, trying to make a joke but I'm terrible at those. :) cswiercz (Dec 07 '10)
that's the thing I'm not sure why people should worry about these issues, it's kind of silly IMO. Evgeny (Dec 07 '10)
In that case I'm done worrying about it. cswiercz (Dec 07 '10)
See also OrderedSetPartitions, which may be helpful. Jason Bandlow (Dec 08 '10)

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
Login/Signup to Post

Question tools

Tags:

Stats:

Asked: Dec 07 '10

Seen: 148 times

Last updated: Dec 07 '10

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.