ERROR : "Input arguments must be convertible to floating-point numbers"

15 vues (au cours des 30 derniers jours)
Hi everyone, im getting this error:
Error using sym/min (line 98)
Input arguments must be convertible to floating-point numbers.
Error in advencedconcrete32a (line 16)
tension= min(Es*(d-c)/c*epscm*As/1000,fy*As/1000);
i guess the problem is that i use "c" before i solved it, how else can i find "c" from the equation compression= tension?
please help.
thank you very much.
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;
epscm=1.5/1000;
syms c
funC=@(epsc) (k*epsc/epsc1-(epsc/epsc1).^2)./(1+(k-2)*epsc/epsc1);
compression= b*fc*c./epscm*integral(funC,0,epscm)/1000;
tension= min(Es*(d-c)/c*epscm*As/1000,fy*As/1000);
solc= compression==tension;
c=solve(solc,c)

Réponse acceptée

Walter Roberson
Walter Roberson le 23 Nov 2019
Replace
tension= min(Es*(d-c)/c*epscm*As/1000,fy*As/1000);
with
tension = piecewise(Es*(d-c)/c*epscm*As/1000<=fy*As/1000,Es*(d-c)/c*epscm*As/1000,fy*As/1000)
Replace
funM=@(epsc)(k*epsc/epsc1-(epsc/epsc1).^2)./(1+(k-2)*epsc/epsc1)*(d-c+(c/epscm)*epsc);
with
funM=@(epsc)(k*epsc./epsc1-(epsc./epsc1).^2)./(1+(k-2)*epsc./epsc1).*(d-c+(c./epscm).*epsc);
  3 commentaires
Walter Roberson
Walter Roberson le 23 Nov 2019
Change
funM=@(epsc)(k*epsc./epsc1-(epsc./epsc1).^2)./(1+(k-2)*epsc./epsc1).*(d-c+(c./epscm).*epsc);
M(i)=b*fc*c/epscm*integral(funM,0,epscm)/1000000;
to
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;
Shimon Katzman
Shimon Katzman le 23 Nov 2019
THANK YOU VERY MUCH!!!
another question, how do i stop the loop when M(i) gets to the maximum and how can i know what value is the maximum from the graph?

Connectez-vous pour commenter.

Plus de réponses (1)

Star Strider
Star Strider le 22 Nov 2019
The min function is not compatible with symbolic objects, for obvious reasons.
Try this instead:
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;
epscm=1.5/1000;
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=fsolve(@(c) compression(c)-tension(c), 1 )
producing (with this initial parameter estimate):
c =
154.2368
  6 commentaires
Star Strider
Star Strider le 23 Nov 2019
My pleasure.
I appreciate the reference. I have posted my Answer.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Computations dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by