Message Boards Message Boards

1
|
10400 Views
|
8 Replies
|
11 Total Likes
View groups...
Share
Share this post:

How to write the product identity in Mathematica?

Posted 12 years ago
Is there anybody can help me to write and excute the following product identity in Mathematica?



Thanks a lot for your support
POSTED BY: John G
8 Replies
To put conditions on terms in Sums and Products you have many possibilities, the simplest is
In[18]:= Sum[If[o1 != o2 && o1 != o3 && o1 != o4
             && o2 != o3 && o2 != o4
             && o3 != o4, 1, 0] x[o1] x[o2] x[o3] x[o4],
             {o1, 1, 2}, {o2, 1, 3}, {o3, 1, 4}, {o4, 1, 5}]

Out[18]= 8 x[1] x[2] x[3] x[4] + 4 x[1] x[2] x[3] x[5] +
2 x[1] x[2] x[4] x[5] + x[1] x[3] x[4] x[5] + x[2] x[3] x[4] x[5]
You must not necessarily write such an ulgy If[], there is the KroneckerDelta[], there are totally antisymmetric tensors built-in for some of the standard cases in filtered sums and/or products.

Regards
Udo.
POSTED BY: Udo Krause
Hi Yahia,

what you have to do here on the right hand side is - given in utterly <outmost> ugly notation in the exercise - simply to sum up the symmetric functions of 
{x1, x2, ..., xl}
of 1, 2, ..., l arguments augmented with the right sign. So you have for K = 1
1 - x1 = 1 - x1
and for K = 2
(1 - x1) (1 - x2) == 1 - x1 - x2 + x1 x2
x1 and x2 are the both symmetric functions of 1 argument, x1 x2 is the single symmteric function of two arguments in {x1,x2}. Please note that using the SymmetricPolynomial allows you to get rid of the Factorial[] because of
x1 x2 = 1/2 (x1 x2 + x2 x1)
and in general you have an expression as simple as
In[14]:= With[{K = 19},
  Product[1 - x[o], {o, 1, K}] ==
   Sum[(-1)^l SymmetricPolynomial[l, Array[x, K]], {l, 0, K}]
  ] // FullSimplify

Out[14]= True

Instead of Subscript[x,1] one used x[1] with advantage, as you see.

Regards
Udo.
POSTED BY: Udo Krause
Posted 12 years ago
However, I have assume that K=2, and have got a result as follows 
In[82]:= Sum[(-1)^l/l!* Sum[Product[Subscript[x, Subscript[n, t]], {t, 1, l}] Boole[ Subscript[n, 1] != Subscript[n, 2]], {Subscript[n, 1], 1, 2}, {Subscript[n, 2], 1, 2}], {l, 0, 2}]                        
Out[82]= 2 - Subscript[x, 1] - Subscript[x, 2] + Subscript[x, 1] Subscript[x, 2]
Which is not match with the fact that 
In[83]:= Product[1 - Subscript[x, l], {l, 1, 2}]
Out[83]=1 - Subscript[x, 1] - Subscript[x, 2] + Subscript[x, 1] Subscript[x, 2]
I think there is something wrong with the method of putting exclusions such as Boole on the above Sum. I will be happy to get your suggestions.Thanks a lot

Regards,
Yahia
POSTED BY: John G
Posted 12 years ago
Thanks for your interest. In fact, the target of my question how to put condition or exclusions to Sum or product when you have such equations?..

regards,
Yahia
POSTED BY: John G
Posted 12 years ago
Thanks so much Udo for your support..I really appreciate your answer. 

regards,
Yahia
POSTED BY: John G
Hi Yahia,

if you are inclined to implement the formula as it stands, then you might type
 Remove[args, cond, X, prod, iter, Y, alghoraniLHS, alghoraniRHS]
 args[l_Integer] :=
  ToExpression[StringJoin["o", ToString[#]] & /@ Range[l]]
 prod[l_Integer] := Times @@ Thread[x[args[l]]]
 cond[l_Integer] :=
  If[And @@ (X @@@ Union[Sort /@ Permutations[args[l], {2}]]), 1, 0]
 iter [m_Integer, l_Integer] := {#, 1, m} & /@ args[l] /; m >= l
 alghoraniLHS[K_Integer?Positive] := Product[(1 - x[o]), {o, 1, K}]
 alghoraniRHS[K_Integer?Positive] :=
1 + Sum[(-1)^l/l! Y[cond[l] prod[l], Sequence @@ iter[K, l]], {l, 1,
     K}] /. {Y :> Sum, X :> Unequal}
into your keyboard. The args function ensures that all functions have the same variables in use. See an example
In[94]:= alghoraniRHS[4]

Out[94]= 1 - x[1] - x[2] - x[3] - x[4] + x[1] x[2] x[3] x[4] +
1/2 (2 x[1] x[2] + 2 x[1] x[3] + 2 x[2] x[3] + 2 x[1] x[4] +
    2 x[2] x[4] + 2 x[3] x[4]) +
1/6 (-6 x[1] x[2] x[3] - 6 x[1] x[2] x[4] - 6 x[1] x[3] x[4] -
    6 x[2] x[3] x[4])
Check a case - it runs considerably longer than the SymmetricPolynomial[], of course - all the permutations have to be sorted out
In[100]:= Expand[alghoraniLHS[7]] - alghoraniRHS[7] // Simplify

Out[100]= 0

The  multiple sums to find terms one knows in advance are computing time wasters
In[109]:= Expand[alghoraniLHS[9]] - alghoraniRHS[9] // Simplify

Out[109]= 0

Please note that even alghoraniRHS[] doesn't go the whole nine yards of implementing the formula because it has the l = 0 term, the 1, in front of it. Can you find a solution without that?

Pleaso note also, that Union[Sort /@ Permutations[...]] is bad style, because it filters out ... permutations. 

Regards
Udo.
POSTED BY: Udo Krause
You can also take advantage of the relatively new iterator conventions:
Product[1 - x[l], {l, 1, k}] ==  Sum[(-1)^l*Product[x[t], {t, n}], {l, 0, k}, {n, Subsets[Range[k], {l}]}]
This is another way to implement index restrictions, with programming constructs, e.g.,
Product[1 - x[l], {l, 1, k}] ==
Sum[(-1)^l/l! Product[x[t], {t, n}], {l, 0, k}, {n, Select[Tuples[Range[k], l], UnsameQ @@ # &]}]
POSTED BY: Todd Rowland
Thanks!
POSTED BY: Udo Krause
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract