Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Mathematica "Do" loop with "If" conditional

  1. May 20, 2016 #1
    Hi,

    I have a function defined by:

    F[x_,y_,z_]:=3 x+y-2Y[z]

    where
    Y[z_]:=3/z

    I'd like to run Do loop to calculate the value of this function for specific regions of x,y,z.

    I can use:

    Do[F[x,y,z],{x,1,2,1},{y,-2,-1,1},{z,3,5,1}],

    But I have two questions here:

    First: How to save the output in .dat file ? I 'd like to have something like:

    F ##~~~~## x ##~~~~## y ##~~~~## z

    Second: How Do loop can contain a conditional If, to put constrain on Y[z] -> 0 <Y[z] < 1, before evaluating F.
     
    Last edited: May 20, 2016
  2. jcsd
  3. May 20, 2016 #2

    Dale

    Staff: Mentor

    You will be better off to use Table here rather than Do.

    Just put the If inside the definition of Y[z_]
     
  4. May 20, 2016 #3
    With the export-to-file in mind I'd suggest creating the table as follows

    Code ( (Unknown Language)):

    data = Table[ If[ Y[z]>0 && Y[z]<1, {F[x,y,z], x, y, z}, 0 ], {x,1,2,1}, {y,-2,-1,1}, {z,3,5,1}] // DeleteCases[0];
     
    Next you can use Export[ file, data, format].

    Remark;
    1. I'm not sure what would happen if you leave the else-case empty in the If[] statement. Perhaps it doesn't add an element or maybe a zero.
    I'm lazy so I went for a way that certainly works.
    2. For ranges like ##\{x,1,2,1\}## you don't have to add the step size if it is one.

    Question;
    Is the function ##Y[z_]## always the same? Then you can simply solve the constraint and avoid it.
    Otherwise you could try to automate it by solving the inequalities and using the answer in the range.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted