?? ks_bilinear.m
字號:
function [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,kk1,k1,k2,uy,dt,xg,x1,x2,f1)
%雙線型恢復力模型,適用于鋼結構非線性地震分析;
%剛度開裂前為k1,開裂后為k2;拐點處理后xt和f2會改變;
py=k1*uy;
f0=(k1-k2)*uy;
kk2=kk1;
f2=f1+kk1*(x2(1)-x1(1));
%%%%控制精度,重新編寫程序,更清晰和實用;拐點處理更明了。
if(kk1==k1)
xup=(f0+x1(1)*k1-f1)/(k1-k2);
xdn=xup-2*uy;
fup=f0+k2*xup;
fdn=fup-2*py;
if(f2>fup)%第一類拐點處理;采用精確拐點非迭代法;
kk2=k2;
[tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xup);
fq=fup;
% fq=f1+k1*(xq(1)-x1(1));%機器誤差,出現問題;
txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
txg(2)=xg(2);
dt1=dt-tq;
[x2]=newmark_single(dt1,k2,m,eta,txg,xq);
f2=fq+k2*(x2(1)-xq(1));
if(x2(2)<0)%采用精確拐點非迭代法求出第二類零速度拐點;
kk2=k1;
[tm,xm]=guaidian2(dt1,k2,m,eta,txg,xq);
% fm=fq+k2*(xm(1)-xq(1));
xup=xm(1);
xdn=xup-2*uy;
fup=f0+k2*xup;
fdn=fup-2*py;
fm=fup;%防止機器誤差;
dt2=dt1-tm;
[x2]=newmark_single(dt2,k1,m,eta,txg,xm);
if(x2(1)>xup)%此處近似處理是否恰當?
x2(1)=xup;
elseif(x2(1)<xdn)
x2(1)=xdn;
end
f2=fm+k1*(x2(1)-xm(1));
% x2=xm;f2=fm;x2(2)=-1e-9;
end
elseif(f2<fdn)
kk2=k2;
[tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xdn);
% fq=f1+k1*(xq(1)-x1(1));
fq=fdn;
txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
txg(2)=xg(2);
dt1=dt-tq;
[x2]=newmark_single(dt1,k2,m,eta,txg,xq);
f2=fq+k2*(x2(1)-xq(1));
if(x2(2)>0)%采用精確拐點非迭代法求出第二類零速度拐點;
kk2=k1;
[tm,xm]=guaidian2(dt1,k2,m,eta,txg,xq);
% fm=fq+k2*(xm(1)-xq(1));
xdn=xm(1);
xup=xdn+2*uy;
fup=f0+k2*xup;
fdn=fup-2*py;
fm=fdn;
dt2=dt1-tm;
[x2]=newmark_single(dt2,k1,m,eta,txg,xm);
if(x2(1)>xup)%此處近似處理是否恰當?
x2(1)=xup;
elseif(x2(1)<xdn)
x2(1)=xdn;
end
f2=fm+k1*(x2(1)-xm(1));
% x2=xm;f2=fm;x2(2)=1e-9;
end
else
end
elseif(kk1==k2)
if(x1(2)>0)
if(x2(2)<0)%采用精確拐點非迭代法求出第二類零速度拐點;
kk2=k1;
[tm,xm]=guaidian2(dt,k2,m,eta,xg,x1);
% fm=f1+k2*(xm(1)-x1(1));
xup=xm(1);
xdn=xup-2*uy;
fup=f0+k2*xup;
fdn=fup-2*py;
fm=fup;
txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
txg(2)=xg(2);
dt1=dt-tm;
[x2]=newmark_single(dt1,k1,m,eta,txg,xm);
if(x2(1)>xup)%此處近似處理是否恰當?
x2(1)=xup;
elseif(x2(1)<xdn)
x2(1)=xdn;
end
f2=fm+k1*(x2(1)-xm(1));
else
end
elseif(x1(2)<0)
if(x2(2)>0)%采用精確拐點非迭代法求出第二類零速度拐點;
kk2=k1;
[tm,xm]=guaidian2(dt,k2,m,eta,xg,x1);
% fm=f1+k2*(xm(1)-x1(1));
xdn=xm(1);
xup=xdn+2*uy;
fup=f0+k2*xup;
fdn=fup-2*py;
fm=fdn;
txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
txg(2)=xg(2);
dt1=dt-tm;
[x2]=newmark_single(dt1,k1,m,eta,txg,xm);
if(x2(1)>xup)%此處近似處理是否恰當?
x2(1)=xup;
elseif(x2(1)<xdn)
x2(1)=xdn;
end
f2=fm+k1*(x2(1)-xm(1));
else
end
else
end
else
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -