optimizing for loop that is been called often
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Asliddin Komilov
 el 8 de Feb. de 2020
  
    
    
    
    
    Comentada: Asliddin Komilov
 el 8 de Feb. de 2020
            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 comentarios
Respuesta aceptada
  KSSV
      
      
 el 8 de Feb. de 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 comentarios
  KSSV
      
      
 el 8 de Feb. de 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);
Más respuestas (0)
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

