Ask Your Question
1

A Combinatorics Problem - Product Rule Indices

asked 2010-12-07 07:38:21 -0500

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.)

edit retag flag offensive close delete

1 answer

Sort by ยป oldest newest most voted
2

answered 2010-12-07 08:18:53 -0500

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.

edit flag offensive delete publish link more

Comments

what if we make questions appear anonymous? Evgeny ( 2010-12-07 08:45:15 -0500 )edit
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 ( 2010-12-07 08:55:33 -0500 )edit
that's the thing I'm not sure why people should worry about these issues, it's kind of silly IMO. Evgeny ( 2010-12-07 09:02:24 -0500 )edit
In that case I'm done worrying about it. cswiercz ( 2010-12-07 09:15:08 -0500 )edit
See also OrderedSetPartitions, which may be helpful. Jason Bandlow ( 2010-12-08 03:43:41 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

[hide preview]

Stats

Asked: 2010-12-07 07:38:21 -0500

Seen: 153 times

Last updated: Dec 07 '10