Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: rules on vector sequence

  • To: mathgroup at smc.vnet.net
  • Subject: [mg98070] Re: rules on vector sequence
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Sun, 29 Mar 2009 02:46:30 -0500 (EST)

On 3/28/09 at 5:41 AM, sottosupremo at gmail.com (Filippo Miatto) wrote:

>Dear all, I need to generate all the vectors, of a given length N,
>that have these three properties:

>1- the entries have to be among -2,-1,0,1,2
>2- the sum of all the entries has to be 0
>3- only two or four of the entries can be different from 0

>do you have any suggestions on how i can do that? i tried something
>but without success.. expecially i don't know how to implement the
>third rule.. thank you in advance! Filippo

Rule 1 lists 5 distinct values. So, each vector can be thought
of as a N digit number base 5. And for N = 5, Range[5^4, 5^5 -
1] will be a list of all possible vectors of length 5 encoded as
a number base 5.

I can implement rule 3 as:

test = Pick[Range[5^4, 5^5 - 1],
    Total[Unitize[IntegerDigits[#, 5] - 2]] & /@ Range[5^4, 5^5
- 1],
    2 | 4];

IntegerDigits[value, 5] - 2

converts each encoded vector to the form specified by rule 1.
Unitize sets each non-zero value to 1. And Pick chooses just
those values with either 2 or 4 non-zero values.

Rule 2 can be implemented as:

Cases[test, _?(Total[IntegerDigits[#, 5]] == 10 &)]

Here, I look for a total of 10 rather than 0 since the digits
for base 5 numbers run from 0 to 4.

There are a total of

In[33]:= Length@Cases[test, _?(Total[IntegerDigits[#, 5]] == 10 &)]

Out[33]= 180

vectors of length 5 meeting your conditions above. The first 5 are:

In[35]:= (IntegerDigits[#, 5] - 2) & /@
  Cases[test, _?(Total[IntegerDigits[#, 5]] == 10 &)][[;; 5]]

Out[35]= {{-1, -2, 0, 1, 2}, {-1, -2, 0, 2, 1}, {-1, -2, 1, 0,
   2}, {-1, -2, 1, 2, 0}, {-1, -2, 2, 0, 1}}

I'll leave it to you to generalize the above for arbitrary
length vectors. Also, note I've not tried to optimize any of
this code. If N gets large, this code won't run all that fast as
things like IntegerDigits are being done more than once for the
same values.



  • Prev by Date: Re: pdf export problem
  • Next by Date: Re: Using a variable set elsewhere within a function that has attribute
  • Previous by thread: Re: rules on vector sequence
  • Next by thread: manipulate, NDSolve, Evaluate