5
$\begingroup$

Does anybody know how to save the intermediate results inside a while function in a table? Here is my code. I would like to save the x,y,counter values in a table in every step that while takes. Thank you!

counter = 0;
While[counter < 5,
 counter = counter + 1;
 sol = NSolve[{2 x + y - counter == 0, 
    3 y + 5 x - 2 counter == 0}, {x, y}];
 ]
$\endgroup$

4 Answers 4

2
$\begingroup$
counter = 0;
sol = {};
While[counter < 5, counter = counter + 1;
 AppendTo[sol, Flatten[{counter, {x, y} /. 
  NSolve[{2 x + y - counter == 0, 3 y + 5 x - 2 counter == 0}, {x,  y}]}]]]

sol

{{1, 1., -1.}, {2, 2., -2.}, {3, 3., -3.}, {4, 4., -4.}, {5, 5., -5.}}

or

counter = 0;
sol2 = ConstantArray[0, 5];
While[counter < 5, counter = counter + 1;
 sol2[[counter]] = Flatten@{counter, {x, y} /. 
     NSolve[{2 x + y - counter == 0, 3 y + 5 x - 2 counter == 0}, {x, y}]}]
sol2

{{1, 1., -1.}, {2, 2., -2.}, {3, 3., -3.}, {4, 4., -4.}, {5, 5., -5.}}

$\endgroup$
7
$\begingroup$

Use Sow and Reap :

counter = 0;
Reap @ While[counter < 5, counter = counter + 1;
  sol = NSolve[{2 x + y - counter == 0, 
     3 y + 5 x - 2 counter == 0}, {x, y}];
  Sow[{x, y, counter} /. sol]]
$\endgroup$
4
$\begingroup$

I think other answer take your question too literally. You do not really need While. IMHO Mathematica way of solving this is to use Table.

Assuming, that your equation always gives a single solution:

Table[
  {x, y, counter} /. 
   First@NSolve[{2 x + y - counter == 0, 
      3 y + 5 x - 2 counter == 0}, {x, y}], {counter, 5}] // TableForm

enter image description here

$\endgroup$
3
$\begingroup$

To reach the same end, as you mentioned Table (a digression: if you know Python, you can compare Wolfram's Table with its list comprehensions, which is attached with more conciseness and readability.), the most direct method is just to use it:

Table[
      Append[
             NSolve[{2 x + y - counter == 0, 3 y + 5 x - 2 counter == 0}, {x, y}],
             counter
            ], 
      {counter, 4}
     ]

{ {{x -> 1., y -> -1.}, 1}, {{x -> 2., y -> -2.}, 2}, {{x -> 3., y -> -3.}, 3}, {{x -> 4., y -> -4.}, 4} }

$\endgroup$
1
  • 2
    $\begingroup$ Using Append you abuse the list of solutions from NSolve. I would make a {NSolve,counter} instead of Append[NSolve,counter]. $\endgroup$
    – Johu
    Sep 8, 2018 at 11:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.