📄 newmark.m
字号:
% Newmark-Beta法求解动力平衡方程 文献本P31
%目的:用于检查ANSYS软件算出的Y、YY和YYY是否正确。P113算例
%************************************************
clc;clear;
%--------------------------------
% 输入结构基本数据,单位:KN,m
%--------------------------------
NN=31; %节点数
NE=30; %单元数
L=4; %单元长度
ND=2*NN; %节点位移总数
%--------------------------------
% 单元刚度矩阵ki,单元质量矩阵mi
%--------------------------------
ki=8.04e9*EleSiff(L); % i=1,2,,NE=30
mi=9878*EleMass(L); % i=1,2,,NE=30
%--------------------------------
% 荷载Pt
%--------------------------------
t=0:0.01:1.99;
randn('state',2)
Pt=-1.12e5*randn(size(t)); %随机干扰
Pt=[zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
Pt
zeros(size(t))
Pt
zeros(size(t))
Pt
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))
zeros(size(t))];
%--------------------------------
% K,M,C
%--------------------------------
K=zeros(ND);
K=StiffAssem(K,ki,1,2); % 62*62
K=StiffAssem(K,ki,2,3);
K=StiffAssem(K,ki,3,4);
K=StiffAssem(K,ki,4,5);
K=StiffAssem(K,ki,5,6);
K=StiffAssem(K,ki,6,7);
K=StiffAssem(K,ki,7,8);
K=StiffAssem(K,ki,8,9);
K=StiffAssem(K,ki,9,10);
K=StiffAssem(K,ki,10,11);
K=StiffAssem(K,ki,11,12);
K=StiffAssem(K,ki,12,13);
K=StiffAssem(K,ki,13,14);
K=StiffAssem(K,ki,14,15);
K=StiffAssem(K,ki,15,16);
K=StiffAssem(K,ki,16,17);
K=StiffAssem(K,ki,17,18);
K=StiffAssem(K,ki,18,19);
K=StiffAssem(K,ki,19,20);
K=StiffAssem(K,ki,20,21);
K=StiffAssem(K,ki,21,22);
K=StiffAssem(K,ki,22,23);
K=StiffAssem(K,ki,23,24);
K=StiffAssem(K,ki,24,25);
K=StiffAssem(K,ki,25,26);
K=StiffAssem(K,ki,26,27);
K=StiffAssem(K,ki,27,28);
K=StiffAssem(K,ki,28,29);
K=StiffAssem(K,ki,29,30);
K=StiffAssem(K,ki,30,31);
K=[K(2:20,2:20) K(2:20,22:40) K(2:20,42:60) K(2:20,62)%引入边界条件,缩减自由度数,58*58
K(22:40,2:20) K(22:40,22:40) K(22:40,42:60) K(22:40,62)
K(42:60,2:20) K(42:60,22:40) K(42:60,42:60) K(42:60,62)
K(62,2:20) K(62,22:40) K(62,42:60) K(62,62)];
M=zeros(ND);
M=MassAssem(M,mi,1,2); % 62*62
M=MassAssem(M,mi,2,3);
M=MassAssem(M,mi,3,4);
M=MassAssem(M,mi,4,5);
M=MassAssem(M,mi,5,6);
M=MassAssem(M,mi,6,7);
M=MassAssem(M,mi,7,8);
M=MassAssem(M,mi,8,9);
M=MassAssem(M,mi,9,10);
M=MassAssem(M,mi,10,11);
M=MassAssem(M,mi,11,12);
M=MassAssem(M,mi,12,13);
M=MassAssem(M,mi,13,14);
M=MassAssem(M,mi,14,15);
M=MassAssem(M,mi,15,16);
M=MassAssem(M,mi,16,17);
M=MassAssem(M,mi,17,18);
M=MassAssem(M,mi,18,19);
M=MassAssem(M,mi,19,20);
M=MassAssem(M,mi,20,21);
M=MassAssem(M,mi,21,22);
M=MassAssem(M,mi,22,23);
M=MassAssem(M,mi,23,24);
M=MassAssem(M,mi,24,25);
M=MassAssem(M,mi,25,26);
M=MassAssem(M,mi,26,27);
M=MassAssem(M,mi,27,28);
M=MassAssem(M,mi,28,29);
M=MassAssem(M,mi,29,30);
M=MassAssem(M,mi,30,31);
M=[M(2:20,2:20) M(2:20,22:40) M(2:20,42:60) M(2:20,62)%引入边界条件,缩减自由度数,58*58
M(22:40,2:20) M(22:40,22:40) M(22:40,42:60) M(22:40,62)
M(42:60,2:20) M(42:60,22:40) M(42:60,42:60) M(42:60,62)
M(62,2:20) M(62,22:40) M(62,42:60) M(62,62)];
C=0.6247*M+0.0039*K;
%--------------------------------
% Newmark-Beta法
%--------------------------------
DeltT=0.01;
Beta=0.25;
Gama=0.5;
a0=1/(Beta*DeltT^2);
a1=Gama/(Beta*DeltT);
a2=1/(Beta*DeltT);
a3=1/(2*Beta)-1;
a4=Gama/Beta-1;
a5=(Gama/(2*Beta)-1)*DeltT;
KK=K+a0*M+a1*C; %等效刚度矩阵
Npoint=200;
Y=zeros(58,Npoint);YY=zeros(58,Npoint); YYY=zeros(58,Npoint); %赋初值
Y(:,1)=0;YY(:,1)=0;YYY(:,1)=M\Pt(:,1); %初始值
for i=1:199
PPt(:,i+1)=Pt(:,i+1)+M*(a0*Y(:,i)+a2*YY(:,i)+a3*YYY(:,i))+C*(a1*Y(:,i)+a4*YY(:,i)+a5*YYY(:,i)); %t+DeltaT 时刻的等效荷载
Y(:,i+1)=KK\PPt(:,i+1); %位移
YYY(:,i+1)=a0*(Y(:,i+1)-Y(:,i)-DeltT*YY(:,i)-(0.5-Beta)*DeltT*DeltT*YYY(:,i)); %加速度
YY(:,i+1)=YY(:,i)+(1-Gama)*DeltT*YYY(:,i)+Gama*DeltT*YYY(:,i+1); %速度
end
for i=1 :200 %检查结果是否正确,若xxx=yyy,则正确。经检查证明,本程序正确。
xxx(:,i)=M*YYY(:,i)+C*YY(:,i)+K*Y(:,i) ;
yyy(:,i)=Pt(:,i);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -