Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I convert here only one term $x_1x_3x_7$ from the binary matrix by first getting the reversed binary 1010001 and then miggling with the data. I know I could convert the columns into binaries and then use solutions here but I feel there must be something builtin: I am trying to convert binary form of multilinear function simply to its symbolic form where the MLF is expressed as a matrix below..

Is there anything built in to convert the binary matrix into the corresponding multilinear function?

Input

enter image description here

Intended output

$x_1x_3x_7+x_1x_3x_5x_6+x_1x_4x_7+x_1x_4x_5x_6-x_2x_3x_7-x_2x_3x_5x_6-x_2x_4x_7-x_2x_4x_5x_6$

share|improve this question
add comment

3 Answers 3

I think you need something like this

Total[#1 - #2] & @@ Partition[#, Length[#]/2] &[
 Times @@ MapIndexed[Subscript[x, #2[[1]]]^# &, Boole[MCSs], {2}]]

enter image description here

share|improve this answer
1  
@hhh Transpose isn't necessary here. Without it the solution becomes more compact. See my update: I delete Transpose and use @@ instead of @@@. It works because Times has a Listable attribute. –  ybeltukov Nov 10 '13 at 21:50
    
@hhh I think you need time to solve your problem. Not a hour, but a day or a week. After update this problem seems too narrow to the community (read: I don't understand it completely). –  ybeltukov Nov 10 '13 at 22:12
1  
@hhh - it is ok to have your contact information in your user profile, but please do not leave identifying information in comments. Also, if the issue can be solved that easily, it can be solved in chat. By definition, if a problem is solved by email, it is not then publicly available to help the community. Part of the rationale of this site is also to help future visitors with questions similar to those already posted, which email solutions do not do. –  Verbeia Nov 11 '13 at 3:19
add comment
MCSs = {{1, 0, 1, 0, 0, 0, 1}, {1, 0, 1, 0, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 1}, 
        {1, 0, 0, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 1, 1, 0}, 
        {0, 1, 0, 1, 0, 0, 1}, {0, 1, 0, 1, 1, 1, 0}};
var = Subscript[x, #] & /@ Range[7];

(Plus @@ Inner[#2^#1 &, MCSs[[;; 4]], var, Times]) - 
(Plus @@ Inner[#2^#1 &, MCSs[[5 ;;]], var, Times])

Mathematica graphics

Alternatively, one could use:

Plus @@ Times @@@ (Pick[var, #, 1] & /@ MCSs[[;; 4]]) -
Plus @@ Times @@@ (Pick[var, #, 1] & /@ MCSs[[5 ;;]])
share|improve this answer
    
You are correct! Inner[Power, Subscript[x, #] & /@ Range[7], {1, 0, 1, 0, 0, 0, 1}, Times] returns x_1x_3x_7, amazing! Now looping required, anyway excellent idea! So easy to read to consider zero/ones as powers ^-^ +1 –  hhh Nov 10 '13 at 23:32
    
@hhh Power wouldn't be correct. You need its variables in reverse. –  Sjoerd C. de Vries Nov 14 '13 at 13:17
add comment

FromCoefficientRules is an approach. Apologies for any transcription errrors. The MCSs matrix was an image not copyable code.

MCS = {{1, 0, 1, 0, 0, 0, 1}, {1, 0, 1, 0, 1, 1, 0}, {1, 0, 0, 1, 0, 
    0, 1}, {1, 0, 0, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 
    1, 1, 0}, {0, 1, 0, 1, 0, 0, 1}, {0, 1, 0, 1, 1, 1, 0}};

This matrix rows can be interpreted as ordered list of the exponents of multinomial term. Generate the variable list:

var = Subscript[x, #] & /@ Range[7];

Generate the rules for term->coefficient:

pos = Thread[MCS[[Range[4]]] -> 1];
neg = Thread[MCS[[Range[4] + 4]] -> -1];

UseFromCoefficientRules to assemble the multinomial:

FromCoefficientRules[Join[pos, neg], var]

yields:

Subscript[x, 1] Subscript[x, 3] Subscript[x, 5] Subscript[x, 6] - 
 Subscript[x, 2] Subscript[x, 3] Subscript[x, 5] Subscript[x, 6] + 
 Subscript[x, 1] Subscript[x, 4] Subscript[x, 5] Subscript[x, 6] - 
 Subscript[x, 2] Subscript[x, 4] Subscript[x, 5] Subscript[x, 6] + 
 Subscript[x, 1] Subscript[x, 3] Subscript[x, 7] - 
 Subscript[x, 2] Subscript[x, 3] Subscript[x, 7] + 
 Subscript[x, 1] Subscript[x, 4] Subscript[x, 7] - 
 Subscript[x, 2] Subscript[x, 4] Subscript[x, 7]
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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