matlab死循环怎么调试,一直是死循环,不知道原因

% 程序说明:适用于矩形柱,截面尺寸600mm*550mm,

clc;clear all;close all;

%-------------------尺寸属性---------------------------------------------

h=600;          %柱截面的高度mm

d=550;          %柱截面的宽度mm

H=1200;         %柱的高度

N_0=3000000;    %为轴力

c=30;           %为保护层厚度

D=24;           %纵筋直径

d_1=10;         %箍筋直径

m=4;            %箍筋肢数

nn=2;            %箍筋肢数

s_01=75;        %箍筋间距

p=4;            %高一侧纵筋根数

q=3;            %宽一侧纵筋根数

%%%---------------材料参数---------------------

Es=2e5;             %钢筋的弹性模量Es(N/mm2)

fy=375;             %纵筋屈服强度

fu=635.6;           %纵筋峰值强度

ey=fy/Es;           %纵筋屈服应变

esm=0.0012;          %箍筋最大应变 (usually ~0.10-0.15)*    %%%有问题

e1=0.002;       %无约束混凝土峰值应力对应的应变

fco=21.4;       %无约束混凝土抗压强度

ecu=0.0738;             %约束混凝土极限压应变

% ====================              结束输入数据       ==========================

%---------------------------------------主程序-----------------------------------

%将截面分成三部分,中间为约束混凝土和普通混凝土,其余为普通混凝土本构,分层就为柱高。

Ms=zeros(1,h);                   %初始化弯矩

Ns=zeros(1,h);                   %初始化轴力

eall=zeros(1,h);                 %调试时加的

angle=linspace(0,0.0001,2000);  %设0.0001为最小曲率

e_0=0;                          %最初应变

angle_02=0;

for l=1:2000

angle_01=angle(l);

n=1;

wucha=0.006;                %0.006为规定的误差值

e_0=e_0;

e_1=0.000001;            %预定截面中心应变调整增量

while (wucha>0.005)&&(n<300)   %迭代次数过多或误差超过容限则终止

for u=1:h

eall(u)=e_0+angle_01*(h/2-u);   %总应变

end

for s=1:(c+d_1)   %保护层混凝土

Ns(s)=unconfined(eall(s),fco,e1)*h;

Ms(s)=Ns(s)*(h/2-s);

end

for s=(c+d_1+1):1:(h-c-d_1)    %约束混凝土和保护层%%%%这里有问题。

Ns(s)=unconfined(eall(s),fco,e1)*(2*c+2*d_1)*(h-2*c-2*d_1)*2+confined(eall(c),fco,nn,d,h,c,d_1,fy,m,D,p,q,s_01)*(h-2*2*c-2*d_1)*(d-2*c-2*d_1);

Ms(s)=Ns(s)*(h/2-s);

end

for s=(h-c-d_1+1):1:h     %保护层混凝土

Ns(s)=unconfined(eall(s),fco,e1)*h;

Ms(s)=Ns(s)*(h/2-s);

end

ss=c+d_1;    %钢筋

while round(ss)<=(h-c-d_1+1)    %大于h-c-d_1+1就跳出循环

f(round(ss))=steel(eall(round(ss)),fu,Es,ey,fy);

if ss==(c+d_1)

area=q*d^2*pi/4;

elseif  (round(ss)<=(h-c-d_1+1))&&(round(ss)>=(h-c-d_1-1))    %四舍五入是因为除法可能会出现小数

area=q*d^2*pi/4;

else

area=2*d^2*pi/4;      %多数试验柱仅有边柱,故仅考虑边侧钢筋

end

Ns(round(ss))=f(round(ss))*area;

Ms(round(ss))=f(round(ss))*area*(h/2-ss);

ss=ss+(h-2*c-2*d_1)/(p-1);

end

N=sum(Ns);

M=sum(Ms);

wucha=abs((N_0-N)/N_0);

if wucha>0.001&&(N>=N_0)

e_0=e_0-e_1;

elseif wucha>0.001&&(N

e_0=e_0+e_1;

end

n=n+1;

end

MM(l)=M;

if eall(c+d_1)>ecu

angle=angle(:,1:(l));

break         %分析终止

end

%  if abs(eall(h-c-d_1))>=0.98*ey&&abs(eall(h-c-d_1))<=1.02*ey

if abs(eall(h-c-d_1+1))>=ey&&abs(eall(h-c-d_1-1))<=ey

angle_02=angle(l);      %截面最外侧纵向受拉钢筋首次屈服时的曲率

end

end

lp=0.08*H+0.022*fy*D;

MM=MM/10^6;

ff=zeros(1,l);                   %初始化位移

PP=zeros(1,l);                   %初始化荷载

for r=1:l

if angle(l)<=angle_02

ff(r)=angle(l)*H^2/3 ;    %ff为柱顶弯曲变形

elseif angle(l)>angle_02

ff(r)=angle_01*H^2/3+(angle(l)-angle_01)*lp*(H-lp/2);

end

PP(r)=(MM(r)-N_0*ff(r)/10^6)/H/1000;

end

ff;

PP;

figure; plot(ff(r),PP(r),'ro'); grid on;

xlabel('Displacement(mm)','FontSize',16); ylabel('load(KN)','FontSize',16); grid on

title('荷载位移曲线','FontSize',16);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值