MATLAB: Error – Undefined function or variable

errorhelpundefined functionundefined variable

Hello everybody.
I am trying to make an if loop but the problem is that "epsc" is undefined veriable.
Is there a better way to make it?
Thank you very much.
b=300; %mm

d=400; %mm
fc=40; %Mpa



Ecshah=57000/145*(fc*145)^0.5; %Mpa
Es=200000; %Mpa
As=2400; %mm^2
fy=400; %Mpa
eps0=1.027*10^-7*fc*145+0.00195;
epscu=3.5/1000;
kshah=0.025*fc*10^3;
A=Ecshah*eps0/fc;
epscmv = linspace(0.05, 3.5, 500)*1E-3;
for i=1:numel(epscmv);
epscm = epscmv(i);
if epsc<=eps0
funCshah=@(epsc) fc*(1-(1-epsc./eps0).^A);
elseif epsc>eps0
funCshah=@(epsc) fc*exp(-kshah*(epsc-eps0).^1.15);
end
end
compression=@(c) b*fc*c/epscm*integral(funCshah,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);
Getting the error:
Undefined function or variable 'epsc'.
Error in Untitled (line 16)
if epsc<=eps0

Best Answer

My apologies for not seeing this Question earlier.
I am not certain what you want to do.
Taking a guess, this runs without error:
b=300; %mm

d=400; %mm
fc=40; %Mpa



Ecshah=57000/145*(fc*145)^0.5; %Mpa
Es=200000; %Mpa
As=2400; %mm^2
fy=400; %Mpa
eps0=1.027*10^-7*fc*145+0.00195;
epscu=3.5/1000;
kshah=0.025*fc*10^3;
A=Ecshah*eps0/fc;
epscmv = linspace(0.05, 3.5, 500)*1E-3;
c = zeros(size(epscmv)); % Preallocate
for i=1:numel(epscmv)
epscm = epscmv(i);
funCshah=@(epsc) fc*(1-(1-epsc./eps0).^A) .* (epsc<=eps0) + fc*exp(-kshah*(epsc-eps0).^1.15) .* (epsc>eps0);
compression=@(c) b*fc*c/epscm*integral(funCshah,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);
end
figure
plot(epscmv, c)
grid
xlabel('\epsilon (cm)')
ylabel('c(\epsilon)')
The ‘funCshah’ function eliminates the if block (and the necessity of having to define ‘epsc’ first) by using ‘logical indexing’, so that the first part of the function:
fc*(1-(1-epsc./eps0).^A)
returns the appropriate values when ‘(epsc<=eps0)’ is true, and the second part of the function:
fc*exp(-kshah*(epsc-eps0).^1.15)
returns the appropriate values when ‘(epsc>eps0)’ is true. Since ‘epsc’ is appropriately passed as an argument, the test is done inside the function and the if block is not necessary.
If my guess is not correct, make appropriate changes to get the result you want.