optimizing for loop that is been called often
    4 views (last 30 days)
  
       Show older comments
    
can this loop be optimized? It is called 1m times and is the only thing I couldn't optimize yet.
Oper_year=1:1:Lifetime;
[costM,PVcost,YearProd,Elcost]=deal(zeros(size(Oper_year)));
for j=1:1:length(Oper_year)
    if  j==1
    costM(j)=Mcost*PVprice*PVP;
    PVcost(j)=PVprice*PVP+Bcost;
    YearProd(j)=sum(PMDb)*PVP;
    Elcost(j)=Elprice;
    Bcost(j)=Bcost;
    else
    Bcost(j)=Bcost(1)*(1+bank*Oper_year(j-1));
    costM(j)=PVprice*(Mcost*(1+Minf)*(Oper_year(j-1))+Mcost)*PVP;
    PVcost(j)=(PVprice*PVP)*(1+bank*Oper_year(j-1))+Bcost(j);
    YearProd(j)=sum(PMDb)*PVP*((1-PVdeg)*Oper_year(j-1)+1);
    end
end
thanks
0 Comments
Accepted Answer
  KSSV
      
      
 on 8 Feb 2020
        Oper_year=1:1:Lifetime;
[costM,PVcost,YearProd,Elcost]=deal(zeros(size(Oper_year)));
costM(1)=Mcost*PVprice*PVP;
PVcost(1)=PVprice*PVP+Bcost;
YearProd(1)=sum(PMDb)*PVP;
Elcost(1)=Elprice;
Bcost(1)=Bcost;
Bcost(2:end)=Bcost(1)*(1+bank*Oper_year(1:end-1));
costM(2:end)=PVprice*(Mcost*(1+Minf)*(Oper_year(1:end-1))+Mcost)*PVP;
PVcost(2:end)=(PVprice*PVP)*(1+bank*Oper_year(1:end-1))+Bcost(2:end);
YearProd(2:end)=sum(PMDb)*PVP*((1-PVdeg)*Oper_year(1:end-1)+1);
5 Comments
  KSSV
      
      
 on 8 Feb 2020
				The error is becasue the variable Bcost has been treated as scalar as well as vector. Rename the scalar Bcost to some other name. I followed like below: 
% some random values for demo 
Lifetime = 12 ; 
Mcost = rand ; 
PVprice = rand ; 
PVP = rand ; 
BCost = rand ; 
PMDb = rand ; 
Elprice = rand ;
bank = rand ; 
Minf = rand ; 
PVdeg = rand ; 
Oper_year=1:1:Lifetime;
[costM,PVcost,YearProd,Elcost,Bcost]=deal(zeros(size(Oper_year)));
costM(1)=Mcost*PVprice*PVP;
PVcost(1)=PVprice*PVP+BCost;
YearProd(1)=sum(PMDb)*PVP;
Elcost(1)=Elprice;
Bcost(1)=BCost;
Bcost(2:end)=Bcost(1)*(1+bank*Oper_year(1:end-1));
costM(2:end)=PVprice*(Mcost*(1+Minf)*(Oper_year(1:end-1))+Mcost)*PVP;
PVcost(2:end)=(PVprice*PVP)*(1+bank*Oper_year(1:end-1))+Bcost(2:end);
YearProd(2:end)=sum(PMDb)*PVP*((1-PVdeg)*Oper_year(1:end-1)+1);
More Answers (0)
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
