2
$\begingroup$

I'm going to describe a toy example here which I'm hoping with some help, I can then soup up into the more complex application I have in mind.

Suppose the input is a list of lists, and for now take the example:

list = {{1,1,3,7}, {2}, {1,2,2,2,3,8}}

Quite simply, I want to sum over list and produce a certain polynomial in formal symbols $P_1, P_2, ...,P_N$ for some $N$ I choose. My main conceptual obstacle is how to implement these symbols in Mathematica!

There is a simple rule for the polynomial--for the example list above, the polynomial should be:

$$P_{1}^{2} \cdot P_{2} \,+ \,P_{1} \,+\, P_{1}^{3} \cdot P_{3}$$

because in the first entry of list there are two elements repeated once and one element repeated twice. Similarly, in the third entry, there are three elements repeated once, and one element repeated three times, which explains the last term. So the subscripts of the $P$'s should encode number of times an element repeats.

I have a schematic idea of how this should go, but can't really get started because I don't know how to deal with these formal symbols! I want to first sum over list. For a given entry, say list[[i]], I want to take a product over m with range {m,1, Max[list[[i]]]}. And for each iteration of this product, I want to produce one of the $P$'s where the subscript is Count[list[[i]],m].

I hope this makes sense, and I'd appreciate any help!

$\endgroup$
4
  • 4
    $\begingroup$ Does Total[Times @@@ (Subsuperscript[p, ##] & @@@ Normal@GroupBy[Tally@#, Last, Length] & /@ list)] works? (you can work with If to remove power 1) $\endgroup$
    – Ben Izd
    May 23, 2022 at 4:19
  • $\begingroup$ That does seem to work, thanks a lot! I had no idea about Subsuperscript but hopefully with that I can soup this up to what I really need. If you cared to make this an answer, I'd accept it. $\endgroup$
    – Benighted
    May 23, 2022 at 4:53
  • 1
    $\begingroup$ I agree with BobHanlon here, it is not good advice to use Subsuperscript on symbolic calculations. See this Q&A for a longer explanation of alternatives and the reasoning behind them. Probably @BenIzd may want to reassess their advise? $\endgroup$
    – rhermans
    May 23, 2022 at 11:34
  • 1
    $\begingroup$ I 100% agree with what Bob Hanlon said and Leonid Shifrin answered in the Q&A, the code I added was only about showing the formation without considering its limitations. Sadly editing comments is limited to 5 minutes. If it confuses future readers, I'll happily delete the comment. $\endgroup$
    – Ben Izd
    May 23, 2022 at 13:10

1 Answer 1

6
$\begingroup$

It is often useful to avoid Subscript, Superscript, and Subsuperscript and instead to just use indexed variables formatted to display in whatever desired fashion. With a slight modification to Ben Izd's method

Format[p[m_, n_]] := Subscript[p, m]^n

list = {{1, 1, 3, 7}, {2}, {1, 2, 2, 2, 3, 8}};

Total[Times @@@ (p @@@ Normal@GroupBy[Tally@#, Last, Length] & /@ list)]

enter image description here

EDIT: With functions

Total[Times @@@ (p[##][x] & @@@
        Normal@GroupBy[Tally@#, Last, Length] & /@ list)]

enter image description here

p[m_, n_][x_] := f[m, n, x]
$\endgroup$
3
  • $\begingroup$ This is also great, thanks! I'm curious, is it easy to define a function with these $P$'s as variables? Is it as simple as, say, TestFunc[p[1,1]_]:=... provided I have already defined them in your version? $\endgroup$
    – Benighted
    May 23, 2022 at 7:05
  • $\begingroup$ What I meant was more that I wanted to define a function $F(N, p_{1}, \ldots, p_{N})$. As opposed to having the $p$'s be functions of some variable. Was just curious if you could use p[n,1] as a variable in defining a Mathematica function. But anyways, I'm sure I can get to the bottom of this. Thanks! $\endgroup$
    – Benighted
    May 23, 2022 at 17:46
  • 1
    $\begingroup$ Unless the definition of F restricts the form of its arguments, it shouldn't care what argument values are used. n=5; F[n, ##]&@@(p[#,1]&/@Range[n]) $\endgroup$
    – Bob Hanlon
    May 23, 2022 at 17:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.