Stopping a loop on the peak
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Shimon Katzman
 el 23 de Nov. de 2019
  
    
    
    
    
    Comentada: Star Strider
      
      
 el 23 de Nov. de 2019
            Hi
I want to stop the loop when i get to the peak of the M
b=300;  %mm
d=400;  %mm
fc=40;  %Mpa
Ecm=22*(fc/10)^0.3*10^3;  %Mpa
Es=200000;  %Mpa
As=2400;  %mm^2
fy=400;  %Mpa
epsc1=min(2.8/1000,0.7*fc^0.31/1000);
epscu=3.5/1000;
k=1.05*Ecm*epsc1/fc;
epscmv = linspace(0.05, 3.5, 50)*1E-3;
for i=1:50(epscmv);
    epscm = epscmv(i);
    funC=@(epsc) (k*epsc/epsc1-(epsc/epsc1).^2)./(1+(k-2)*epsc/epsc1);
    compression=@(c) b*fc*c/epscm*integral(funC,0,epscm)/1000;
    tension=@(c) min(Es*(d-c)/c*epscm*As/1000,fy*As/1000);
    c(i)=fsolve(@(c) compression(c)-tension(c),1);
    funM=@(epsc)(k*epsc./epsc1-(epsc./epsc1).^2)./(1+(k-2)*epsc./epsc1).*(d-c(i)+(c(i)./epscm).*epsc); 
    M(i)=b*fc*c(i)/epscm*integral(funM,0,epscm)/1000000;
    phi(i)=epscm/c(i);
    if M(i)<M(i-1)
        break;
    end
end
[Mmax,idx]=max(M)
phiAtMmax=phi(idx)
plot(phi, M)
grid on
xlabel('phi  [1/mm]')
ylabel('Moment  [kNm]')
A kind forum member helped me but now I get the Error:
Attempted to access M(0); index must be a positive integer or logical.
Error in advencedconcrete32a (line 22)
    if M(i)<M(i-1)
0 comentarios
Respuesta aceptada
  Star Strider
      
      
 el 23 de Nov. de 2019
        Change the if block to: 
    if (i > 1) & (M(i)<M(i-1))
        break;
    end
and your code appears to give the desired result.  
This avoids the ‘zero index’ problem by comparing only the second and later values of ‘M’.  
4 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

