newmark迭代的MATLAB程序实现
% newmark方法的程序实现
clc
clear
m=[6/12,1/12;1/12,2/12];
k=[2*3,-1*2;-1*2,1*2];
f1=[0;1];
d2=inv(m)*f1;
b=0.25;
r=0.5;
dt=0.12;
a0=1/(b*(dt)^2);
a1=r/(b*dt);
a2=1/(b*dt);
a3=1/(2*b)-1;
a4=r/b-1;
a5=0.5*dt*((r/b)-2);
a6=dt*(1-r);
a7=r*dt;
pk=k+a0*m;
pk=inv(pk);
d0=[0;0];
d1=[0;0];
for i=1:10
t=0.12*i;
if t>0.5
f1(2)=0;
end
ff=0.0;
d00=0.0;
ff=ff+m*(a0*d0+a2*d1+a3*d2);
pf1=f1+ff;
d00=d00+pk*pf1;
d22=a0*(d00-d0)-a2*d1-a3*d2;
d11=d1+a6*d2+a7*d22;
d0=d00;
d1=d11;
d2=d22;
a(i)=d00(1);
b(i)=d00(2);
end
a
b
这个程序其实较好理解,先搞懂newmark方法,一般的动力学有关的书上会有newmark方法的编程思路,结合着看一下,应该十分钟内您就会明白.
第一段是一些初值设置;第二段就是迭代算法!
批评指正,相互学习!
转自 振动论坛