For Loop and final output matrix

1 view (last 30 days)
Amine Ben Ayara
Amine Ben Ayara on 4 Oct 2016
Edited: Andrei Bobrov on 5 Oct 2016
Hello Matlab Wizards, I hope everyone is doing wonderful. I have written a code that has an outside loop that consists of basically increasing the values of all variables in one of the input matrices within the second column incrementally from 0:750. The end product is a matrix that is computed based on some other matrices. What I would like help with is; I need to get some intermediate matrices out everytime an iteration takes place( i.e., if the loop goes 10 times, I need to save a particular intermediate matrix ten times) because I have to verify something. This is an example of my code:
function [CrUnit,AgrCarbonSimuN1,CR9,AgrCarbonSimuN2,AgrCarbonSimuN3,MN, MSA1,...
MSA2, MSA3] = CarbonProject(X, Lam,Y,UnitArea,ALLC3P,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:750;
X(:,2)=X(:,2)+k;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] = MatrixCountnew(Mtest1,Mtest2,...
MN1, MN2, MN3,Y,UnitArea,n)
[CS,CS3030,CSLS,SUMCSLS,CrUnit] = CarbonPixels( ALLC3P,MSA,UnitArea,m );
for j=1:44040 ;
CR9(j,1)=CrUnit(:,:,j);
end
Period1Carbon= CR9(1:14680);
Period2Carbon= CR9(14681:29360);
Period3Carbon= CR9(29361:44040);
for cr7=1:14680;
[AgrCarbon1(cr7,:)]=[Period1Carbon(cr7,:)];
[AgrCarbon2(cr7,:)]=[Period2Carbon(cr7,:)];
[AgrCarbon3(cr7,:)]=[Period3Carbon(cr7,:)];
end
AgrCarbonSimuN1(1:14680,k+1)=AgrCarbon1;
AgrCarbonSimuN2(1:14680,k+1)=AgrCarbon2;
AgrCarbonSimuN3(1:14680,k+1)=AgrCarbon3;
X=Xv;
end
So basically, by the end of each iteation(i=0:750) I would like to have these matrices: MN1, and MSA1 not just when all the loop is done 750 times. I hope I made some sense.
  4 Comments
dpb
dpb on 4 Oct 2016
What's the dimension of the two arrays of interest now?
Andrei Bobrov
Andrei Bobrov on 5 Oct 2016
CrUnit - array with size: (1 x 1 x 44040)?

Sign in to comment.

Answers (2)

Benjaminas Marcinkevicius
Example how i usually do it, a big ugly, but works if understood your problem correctly. you end up with cell array filled with your desired matrix.
%code
a = cell(20,1); % create cell array
for j=1:20
if (mod(j,10) == 0) % condition how often do you want to dump your matrix
a{j,1}= [1 1 1 1 1];
end
end
a = a(~cellfun('isempty',a)) % clear empty cell arrays
  1 Comment
Amine Ben Ayara
Amine Ben Ayara on 5 Oct 2016
Edited: Andrei Bobrov on 5 Oct 2016
Good morning Ben, I replied but for some reason, it did not post to your answer as well. Here is what I wrote:
Thank you so much for taking the time to help with this. You wrote a really elaborate code that I am having a hard time using because of the variety of the dimensions of my output matrices. lol Let me make my question simpler and clearer if I may. The objective is to get a set of matrices( one set of output) after every iteration is done (i.e, if i=0:10, then after 11 loops I should have 11 sets of output matrices). This is simply done by increasing one set of variables from one input matrix X(:,2) incrementally by 1 from 0 to 10. So for example, MN is a 3D matrix that has 14680 (5*5) matrices in it. So I need to have one set of MN after each iteration is done so basically 11 MN. here is a more simplified version of my code only focusing on few matrices.
function [MNPr1,MSA1,MSA1Trans] = Prb_Trans_CR7(X, Lam,Y,UnitArea,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:10;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[ MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] =...
MatrixCountnew(Mtest1,Mtest2, MN1, MN2, MN3,Y,UnitArea,n)
MNPr1(k)=MN1;
MSA1Trans(k)=MSA1;
X=Xv;
end

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 5 Oct 2016
Edited: Andrei Bobrov on 5 Oct 2016
Variant:
function [CrU,AgrCarbonSimu,MN,MN1,MSA1, MSA2, MSA3]...
= CarbonProject(X, Lam,Y,UnitArea,ALLC3P,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
AgrCarbonSimu = zeros(14680,751,3);
xx = bsxfun(@plus,X(:,2),0:750);
MN = cell(751,1);
MN1 = cell(751,1);
MSA1 = cell(751,1);
MSA2 = cell(751,1);
MSA3 = cell(751,1);
CrU = zeros(14680,751);
for k = 1:751;
[Mtest,MN{k}, MN1{k}, MN2, MN3, Mtest1, Mtest2] = Predict_all(xx(:,k),Lam,Y)
[MS1, MS2,MS3,MSA1{k},MSA2{k}, MSA3{k}, MSA ]...
= MatrixCountnew(Mtest1,Mtest2,MN1{k}, MN2, MN3,Y,UnitArea,n);
[CS,CS3030,CSLS,SUMCSLS,CrU(:,k)] = CarbonPixels( ALLC3P,MSA,UnitArea,m );
AgrCarbonSimu(:,k+1,:) = reshape(CrU(:,k),[],3);
end
  1 Comment
Amine Ben Ayara
Amine Ben Ayara on 5 Oct 2016
Edited: Andrei Bobrov on 5 Oct 2016
Hello Andrei, Thank you so much for taking the time to help with this. You wrote a really elaborate code that I am having a hard time using because of the variety of the dimensions of my output matrices. lol Let me make my question simpler and clearer if I may. The objective is to get a set of matrices( one set of output) after every iteration is done (i.e, if i=0:10, then after 11 loops I should have 11 sets of output matrices). This is simply done by increasing one set of variables from one input matrix X(:,2) incrementally by 1 from 0 to 10. So for example, MN is a 3D matrix that has 14680 (5*5) matrices in it. So I need to have one set of MN after each iteration is done so basically 11 MN. here is a more simplified version of my code only focusing on few matrices.
function [MNPr1,MSA1,MSA1Trans] = Prb_Trans_CR7(X, Lam,Y,UnitArea,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:10;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[ MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] = ...
MatrixCountnew(Mtest1,Mtest2, MN1, MN2, MN3,Y,UnitArea,n)
MNPr1(k)=MN1;
MSA1Trans(k)=MSA1;
X=Xv;
end
the beginning has Xv=X and closing the code has X=Xv; that's basically used to reset the values of X(:,2) after each iteration is done. I hope I explained better! THANK YOU so much

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!