Ask Your Question
1

A Combinatorics Problem - Product Rule Indices

asked 2010-12-07 14:38:21 +0100

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 merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2010-12-07 15:18:53 +0100

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 link more

Comments

what if we make questions appear anonymous?

Evgeny gravatar imageEvgeny ( 2010-12-07 15:45:15 +0100 )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 gravatar imagecswiercz ( 2010-12-07 15:55:33 +0100 )edit

that's the thing I'm not sure why people should worry about these issues, it's kind of silly IMO.

Evgeny gravatar imageEvgeny ( 2010-12-07 16:02:24 +0100 )edit

In that case I'm done worrying about it.

cswiercz gravatar imagecswiercz ( 2010-12-07 16:15:08 +0100 )edit

See also OrderedSetPartitions, which may be helpful.

Jason Bandlow gravatar imageJason Bandlow ( 2010-12-08 10:43:41 +0100 )edit

Your Answer

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

Add Answer

Question Tools

Stats

Asked: 2010-12-07 14:38:21 +0100

Seen: 660 times

Last updated: Dec 07 '10