Mathematica "Do" loop with "If" conditional

Click For Summary
The discussion focuses on using a Do loop to evaluate a mathematical function defined as F[x,y,z] = 3x + y - 2Y[z], where Y[z] = 3/z, over specific ranges of x, y, and z. Users are advised to use a Table instead of Do for better control, especially when applying a conditional If statement to ensure Y[z] falls between 0 and 1 before evaluating F. The suggested method involves creating a data table with the If condition and then exporting the results to a .dat file using the Export function. There is also a note on the potential behavior of the If statement's else-case and a question about the constancy of the function Y[z]. The thread emphasizes the importance of correctly structuring the loop and conditions for effective data output.
Monaliza Smile
Messages
5
Reaction score
0
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:
Physics news on Phys.org
You will be better off to use Table here rather than Do.

Just put the If inside the definition of Y[z_]
 
With the export-to-file in mind I'd suggest creating the table as follows

Code:
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.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 13 ·
Replies
13
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
1
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K