Re: For loops with mathematica....
- To: mathgroup at smc.vnet.net
- Subject: [mg101126] Re: [mg101069] For loops with mathematica....
- From: Murray Eisenberg <murray at math.umass.edu>
- Date: Wed, 24 Jun 2009 06:36:13 -0400 (EDT)
- Organization: Mathematics & Statistics, Univ. of Mass./Amherst
- References: <200906231105.HAA08136@smc.vnet.net>
- Reply-to: murray at math.umass.edu
The form (i, end} for an iterator is essentially an abbreviation for {i,
1, end}. And that is a special case of {i, start, end}. That, in turn,
is a special case of {i, start, end, increment}.
But you're asking about a more complicated set of values for i than any
single iterator of that form will provide. Fortunately, in the current
version of Mathematica, there is a more general iterator construction
yet, {i, valueList}, which iterates over the values given in the list
valueList. For example,
Do[expr,{i,{3,8,12,291}}]
will evaluate expr at each of i = 3, 8, 12, 291.
So your problem now reduces to constructing the list of values you want,
and that's straightforward:
Join[Range[1,20], Range[300,400]]
You are correct that if you want to "do" several things -- that is,
evaluate several individual expressions during each iteration, then you
separate them by semicolons, in other words, form from them a compound
expression. For example:
Do[Print[i^2];Print[i^3], {i,{3,8,12,291}}]
You say that separating expressions with a semicolon in the first
argument of Do "doesn't seem to work", but you didn't explain in what
way it doesn't work.
Finally, you might do some more reading of Mathematica documentation to
learn more of the basics. And also to see whether you really need a Do
loop at all, or any other kind of explicitly constructed iterative
construct. You may find that Nest can nicely automate the entire
process for you. Or that you can use whole-array processing, functional
programming, or pattern-matching instead of an explicitly coded loop.
And you might find that such an alternative procedure is much simpler to
code and read and even more efficient than an explicitly coded loop.
Julien wrote:
> Hey guys,
>
> I am totally new to mathematica.
> I want to use a simple loop for but with many arguments in the loop...
> the help says to do
>
> Do[ thingstodo, {i,8}]
>
> i will go from 1 to 8 to do thingstodo.
>
> First question: what if I want i to go from 20 then 200 then 300 then 400, (can we give a sequence as argument?)
>
> Second question: I have a lot of line to do in things to do. should I separate everything with a ; (doesn t seem to work, or use a procedure or something?)
>
>
> THanks a lot for your help!!!
>
> Julien
>
--
Murray Eisenberg murray at math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower phone 413 549-1020 (H)
University of Massachusetts 413 545-2859 (W)
710 North Pleasant Street fax 413 545-1801
Amherst, MA 01003-9305
- References:
- For loops with mathematica....
- From: Julien <jderr@cgr.harvard.edu>
- For loops with mathematica....