Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2002

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

Search the Archive

Re: Changing delayed formula

  • To: mathgroup at smc.vnet.net
  • Subject: [mg35474] Re: [mg35461] Changing delayed formula
  • From: Tomas Garza <tgarza01 at prodigy.net.mx>
  • Date: Sun, 14 Jul 2002 06:19:49 -0400 (EDT)
  • References: <200207130749.DAA08590@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hola Julio!

You might try a little functional programming, one of the beauties of
Mathematica. I propose the following (written in a hurry, so I expect there
will be some improvements on it):

In[1]:=
des = {{11, 12, 13, 14}, {21, 22, 23}, {31, 32},
   {41, 42, 43, 44, 45}};

To start with, you may obtain the Lengths of the sublists directly with Map:

In[2]:=
Length /@ des
Out[2]=
{4, 3, 2, 5}

Now, use Outer, which together with Flatten and Partition will construct
succesive combinations of the elements of your lists. For example (here you
don't need to partition yet),

In[3]:=
a1 = Flatten[Outer[List, des[[1]], des[[2]]], 1]
Out[3]=
{{11, 21}, {11, 22}, {11, 23}, {12, 21}, {12, 22},
  {12, 23}, {13, 21}, {13, 22}, {13, 23}, {14, 21},
  {14, 22}, {14, 23}}

You may now use Fold, but first define the function

In[4]:=
f[x_, j_] := Partition[Flatten[Outer[List, x,
     des[[j + 1]], 1]], j + 1]

and now

In[5]:=
Fold[f, des[[1]], Range[3]]

will get you where you want (I omit the output).

Tomas Garza
Mexico City


----- Original Message -----
From: "Julio Vera" <jvera at adinet.com.uy>
To: mathgroup at smc.vnet.net
Subject: [mg35474] [mg35461] Changing delayed formula


>
> Hi,
>
> I have a list of lists. it's length (the number of sublists it
> contains) varies.
>
> In[1]:= des={{11,12,13,14},{21,22,23},{31,32},{41,42,43,44,45}}
>
> Out[1]:= {{11,12,13,14},{21,22,23},{31,32},{41,42,43,44,45}}
>
> The length of each of the sublists is arbitrary, too. So I have this
> list of lengths.
>
> In[2]:= elems=Flatten[Table[Dimensions[des[[i]]],{i,Length[des]}]]
>
> Out[2]:= {4,3,2,5}
>
> I want to obtain the list of all combinations of one element of each
> sublist, bounded by &&. This will be a list of 120 elements, each of
> them with 4 components. I define a delayed formula, and apply Array to
> it (the characters printed as bold are subscripts in the Mathematica
> notebook).
>
> In[3]:=
> cond4[a_,b_,g_,d_]:=des[[1,a]]&&des[[2,b]]&&des[[3,g]]&&des[[4,d]]
>
> In[4]:= combi=Flatten[Array[condLength[des],elems]]
>
> Out[4]:=
> {11&&21&&31&&41,11&&21&&31&&42,11&&21&&31&&43,11&&21&&31&&44,...
>
>   ...14&&23&&32&&42,14&&23&&32&&43,14&&23&&32&&44,14&&23&&32&&45}
>
> Since the length of des varies, I would have to define cond each time.
> For instance:
>
> cond3[a_,b_,g_,d_]:=des[[1,a]]&&des[[2,b]]&&des[[3,g]]
>
> I would like to make a definition for cond that would adapt to these
> changes automatically.
>
> I arrived to this solution, which is not rejected by Mathematica, but
> does not work, either.
>
> In[5]:= d[a_,b_]:=des[[a,b<>"_"]]
>
> In[6]:= Unprotect[ReplaceAll]
>
> Out[6]:= {ReplaceAll}
>
> In[7]:=
>
condLength[des][Table[FromCharacterCode[944+i]<>"_",{i,Length[des]}]]/.{a__}
=AEa:=Apply[And,Table[d[i,FromCharacterCode[944+i]<>"_"],{i,Length[des]}]]
>
> In fact, I quit the kernel and rerun all the cells except the one
> written here as In[3]. If not, the definition for cond4 remains as it
> was. I was not able to clear cond4 individually.
>
> Thanks very much for anything you can suggest.
>
> Best regards,
>
> Julio Vera
>
>



  • Prev by Date: Re: Re: Graphics Question
  • Next by Date: How to Fix Time Steps for NDSolve
  • Previous by thread: Changing delayed formula
  • Next by thread: Re: Changing delayed formula