www.gusucode.com > matlab非线性混凝土模型计算分析源码程序 > guaidian2.m

    function [tm,xm]=guaidian2(dt,k1,m,eta,xg,x1);%第二类拐点处理; 
%%%%精确拐点非迭代法;纽马克法求解;
tm=-1;
%采用精确拐点非迭代法求出零速度拐点;
%gama/beta等于2则解二次方程,很方便的。
gama=0.5;beta=0.25;w=sqrt(k1/m);cc=2*eta*w*m;
pa=k1*x1(3)/2-k1*beta*x1(3)/gama;%%pa==0
pb=(xg(2)-xg(1))*m/dt+k1*x1(2)-k1*beta*x1(2)/gama;
pc=-m*x1(3)/gama-cc*x1(2);
pd=-m*x1(2)/gama;
if(pb==0)
    tm=-pd/pc;
else
    a=pc/pb;b=pd/pb;%%%%%%x=solve('x^2+a*x+b=0');
    det(1)=-1/2*a+1/2*(a^2-4*b)^(1/2);
    det(2)=-1/2*a-1/2*(a^2-4*b)^(1/2);
	for ni=1:2
        if det(ni)<dt&det(ni)>=0
            tm=det(ni);
        end
	end
end
if(length(tm)~=1)
    tm=min(tm);
end
if(tm>dt|tm<0)
    cuowu='222222?????'
end
txg(1)=xg(1);
txg(2)=xg(1)+(xg(2)-xg(1))*tm/dt;
if(tm==0)
    xm=x1;
else    
    [xm]=newmark_single(tm,k1,m,eta,txg,x1);
end
%%%不计误差则应该xm(2)=0;