How to log the data in the workspace without modifying the content of the for loop?

7 views (last 30 days)
I am currently using MATLAB 2022a.
I have a for loop (let's call this for loop LOOP_A) doing some calculation and each calculation is depending on some values from the previous loop.
Without editting too much of the content of LOOP_A, I want to log those variables at the end of each loop.
I'm thinking about having another for loop (let's call this one LOOP_B) that log the data in the workspace for each loop of LOOP_A till the entire execution of the LOOP_A is finished.
Here is what I would like to have:
% Repeat the following till all loops are finished:
% LOOP_A:
% Pause after one iteration
% Send data from workspace to LOOP_B
% Wait till LOOP_B send "good to go" signal if not finished
% LOOP_B:
% Receive data from LOOP_A
% Store the data
% Send "good to go" signal to LOOP_A
% LOOP_A:
% Continue running for one iteration
% Send data from workspace to LOOP_B
% Wait till LOOP_B send "good to go" signal if not finished
% ...
Is there a way I can do that?
Edit 1:
To be more specific, I'm storing the data into another timeseries data. If LOOP_A has 100 loops, I would like to store them into an array of 100 elements and give it a time.

Answers (3)

Matt J
Matt J on 12 Sep 2024
Edited: Matt J on 12 Sep 2024
What does "log the data" mean? Do you mean you want to store it to a file on disk, or do you want to store it in some sort of array? And in what way is loop B a loop at all? It doesn't seem to be doing any repetitions of its own.
In any case, loops don't have their own private workspaces. They exist in a common workspace with the code that surrounds them. For example, in the nested loop below, the inner loop has access not only to the variables B and D, but automatically also to A and C in the loop outside of it.
for A=1:5
C=10*A;
for B=1:3
D=100*B;
Matrix(A,B) = C+D;
end
disp 'Good to go'
end
Good to go Good to go Good to go Good to go Good to go
disp(Matrix)
110 210 310 120 220 320 130 230 330 140 240 340 150 250 350
  1 Comment
Andy
Andy on 12 Sep 2024
Please check my Edit 1 in the post regarding to my "store into data". You might be right, LOOP_B does not have to be a loop. The problem is that LOOP_A is a script with for loop and keeps overwriting the workspace variable. More importantly, I cannot do too much to LOOP_A. I'm not sure how I can store each variable value into an array before it gets overwrite and without editing the content of LOOP_A. If I can edit LOOP_A I would just store all of those variables into an array before they got overwriten...

Sign in to comment.


Catalytic
Catalytic on 12 Sep 2024
I also do not see how B is a loop if it doesn't have it's own iterations. But anyway, maybe this is what you meant -
storedData = runTask
Good to go Good to go Good to go Good to go Good to go
storedData = 5x2
10 100 20 200 30 300 40 400 50 500
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
function storedData =runTask
storedData=nan(5,2);
for A=1:5
Adata=10*A;
nestedLogger() %i.e., "Loop B"
end
function nestedLogger()
Bdata=100*A;
storedData(A,:) = [Adata,Bdata];
disp 'Good to go'
end
end
  1 Comment
Andy
Andy on 12 Sep 2024
Edited: Andy on 12 Sep 2024
Please check my Edit 1 in the post regarding to "store into data". You might be right, LOOP_B does not have to be a loop. The problem is that LOOP_A is a script with for loop and I cannot edit too much of LOOP_A.

Sign in to comment.


Walter Roberson
Walter Roberson on 12 Sep 2024
Your structure reminds me of using SPMD together with spmdSend and spmdBarrier (formerly labSend and labBarrier)
But your structure also reminds me of using parfeval and afterEach
  1 Comment
Andy
Andy on 12 Sep 2024
I'm not familiar with either one. I looked into parfeval and afterEach but I don't think I can use it since the variables in LOOP_A has a lot of complicated computation involving previous value in the past iteration(s). SPMD seems closer to what I'm looking for. Maybe I can try spmdBarrier in LOOP_A and done by one worker, then make another worker handle storing the data into array and use spmdBarrier too. Thanks!

Sign in to comment.

Tags

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!