44 lines
1.6 KiB
Matlab
44 lines
1.6 KiB
Matlab
function [uu,vv,aa,ttt]=NewmarkBeta1(t,dt,delta,beta,M,C,K,acc_x,Constr)
|
|
n=length(t);
|
|
beta=0.25;
|
|
gamma=0.5;
|
|
a0=1/(beta*dt^2);
|
|
a1=gamma/(beta*dt);
|
|
a2=1/(beta*dt);
|
|
a3=1/(2*beta)-1;
|
|
a4=gamma/beta-1;
|
|
a5=(dt/2)*(gamma/beta-2);
|
|
a6=dt*(1-gamma);
|
|
a7=dt*gamma;
|
|
uu(:,1)=zeros(size(M,1),1);;%位移初始值
|
|
vv(:,1)=zeros(size(M,1),1);%速度初始值
|
|
aa(:,1)=zeros(size(M,1),1);%加速度初始值
|
|
P(:,1)=zeros(size(M,1),1); %荷载初始值
|
|
P1(:,1)=zeros(size(M,1),1);%等效荷载初始值
|
|
% I=ones(size(M,1),1);; %6*1单位阵
|
|
I=zeros(size(M,1),1);; %6*1单位列向量
|
|
for i=1:size(K,1)/3
|
|
|
|
I(3*(i-1)+1)=1;%确定惯性力施加的自由度
|
|
end
|
|
K1=K+a0*M+a1*C; %形成等效刚度矩阵
|
|
for i=1:n-1
|
|
|
|
P(:,i+1)=-M*I*acc_x(i+1);%t(i+1)时刻结构的荷载
|
|
P1(:,i+1)=P(:,i+1)+M*(a0*uu(:,i)+a2*vv(:,i)+a3*aa(:,i))+C*(a1*uu(:,i)+a4*vv(:,i)+a5*aa(:,i));%t(i+1)时刻结构的等效荷载
|
|
% % %施加约束--乘大数法;当代入结构整体的刚度矩阵、质量矩阵、阻尼矩阵需要施加边界约束
|
|
% for iConstr=1:size(Constr,1)
|
|
% for j=2:4
|
|
% if ~isnan(Constr(iConstr,j))
|
|
% K1(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1 )+j-4)=...
|
|
% 1e12*K1(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1 )+j-4);
|
|
% P1(3*Constr(iConstr,1)+j-4)=Constr(iConstr,j)*...
|
|
% K1(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1)+j-4);
|
|
% end
|
|
% end
|
|
% end
|
|
uu(:,i+1)=(K1)\P1(:,i+1);%t(i+1)时刻结构的位移
|
|
aa(:,i+1)=a0*(uu(:,i+1)-uu(:,i))-a2*vv(:,i)-a3*aa(:,i);%t(i+1)时刻结构的加速度
|
|
vv(:,i+1)=vv(:,i)+a6*aa(:,i)+a7*aa(:,i+1);%t(i+1)时刻结构的速度
|
|
ttt(i+1)=dt*(i-1);
|
|
end |