Why does the first value in loop get overwritten

1 view (last 30 days)
For some reason when fi == 1, NPV_list(1,1) is inserted correctly, but when fi=2 the value gets overwritten, which i dont understand... at all. This is the code:
clear all;
clc;
Fi = [0,0.8:0.05:1];
T = 160;
NPV_list = NaN(length(Fi),1);
for fi = 1:length(Fi);
fi
F = Fi(fi);
load (['res_us_v15_',num2str(T),'_',num2str(100*F)])
NPV_list(fi,1) = us.sim.NPV_Pb_Wlth_avg
clearvars -except NPV_list Fi T;
end
Can someone explain this? This is the output for first 2 iterations:
fi =
1
NPV_list =
9.9570
NaN
NaN
NaN
NaN
NaN
fi =
2
NPV_list =
9.8664
NaN
NaN
NaN
NaN
NaN

Accepted Answer

per isakson
per isakson on 8 Dec 2012
Edited: per isakson on 8 Dec 2012
No, I cannot explain. However, what else is in the files you load? The clearvars looks scary to me.
My function, cssm, works:
>> cssm()
ans =
101 102 103 104 105 106
where
function NPV_list = cssm()
Fi = [0,0.8:0.05:1];
T = 160;
us = [ 101 : 109 ];
NPV_list = NaN(1,length(Fi));
for fi = 1:length(Fi);
fi;
F = Fi(fi);
NPV_list(1,fi) = us(fi);
clearvars -except NPV_list Fi T us;
end
end
.
Doc says:
S = load( filename, variables );
Try
S = load( filename, 'us' );
and remove clearvars.
Last, check whether there is a variable in the loaded file that explains the behavior you see.

More Answers (2)

Richard
Richard on 8 Dec 2012
Edited: Richard on 8 Dec 2012
Try
Fi = [0,0.8:0.05:1];
T = 160;
NPV_list = NaN(length(Fi),1);
for fi = 1:length(Fi);
F = Fi(fi);
load (['res_us_v15_',num2str(T),'_',num2str(100*F)])
NPV_list(fi,1) = us.sim.NPV_Pb_Wlth_avg
end
clearvars -except NPV_list Fi T;
I wouldn't clear the variables until after the loop. It might be the case that by clearing Fi and T, it cannot read it for loop 2 thus no output.

Sargondjani
Sargondjani on 9 Dec 2012
Thanks guys... normally i never save iteration variables like 'fi' but in this case the files contained "fi = 1". very silly

Tags

Community Treasure Hunt

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

Start Hunting!