weixin 发表于 2018-5-11 16:14

动力学方程数值解法:直接积分法(Newmark类)

  Newmark类直接积分法原理       下面首先来讨论一下Newmark类直接积分法的基本原理。

  tn+1时刻的位移、速度、加速度可以表示为:
  将式(3)代入到式(1),(2)可以得到:
  对上述式子进行进一步的整理:1. 可以直接略去高阶项;2. 用变权来调节。
  假设其在tn+1时刻近似满足运动方程:
  通过变换将速度和加速度用位移表示,代入运动方程,只剩tn+1时刻位移一个未知数,可得到:
  根据参数选择的不同,它包含了三个经典的算法。

  ① Newmark平均加速度法
  ② Newmark线加速度法
  ③ 中心差分法

  Newmark法       Newmark法的一般步骤:
  (1) 初始值计算
  ① 形成系统矩阵K,M和C

  ② 定初始值

  ③ 选择时间步长△t,参数γ 、β。并计算积分常数:
  ④ 形成等效刚度矩阵
  ⑤ 矩阵进行三角分解

  (2) 对每一时间步
  ① 计算t+△t时刻的等效载荷
  ② 求解t+△t时刻的位移
  ③ 计算t+△t时刻的加速度和速度

  Newmark法应用实例       newmarkb子程序:


function =newmarkb(M,K,C,N,P,x0,v0,a0,dt,RecordLength)% newmark-beta method% obtain the response of the dynamic system% =newmarkb(M,K,C,N,P,x0,v0,a0,dt,RecordLength)% M - mass matrix% K - stiffness matrix% C - damping matrix% N - DOF% P - loads% x0 - initial displacement% v0 - initial velocity% a0 - initial acceleration% dt - interval% RecordLength - number of sampling pointsx=zeros(N,RecordLength); v=zeros(N,RecordLength); a=zeros(N,RecordLength);
x(:,1)=x0; v(:,1)=v0; a(:,1)=a0; deta=0.50; alpha=0.25;a0=1/alpha/dt^2; a1=deta/alpha/dt; a2=1/alpha/dt; a3=1/2/alpha-1;a4=deta/alpha-1; a5=dt*(deta/alpha-2)/2; a6=dt*(1-deta); a7=deta*dt;K_=K+a0*M+a1*C; iK=inv(K_);
for i=1:RecordLength-1    P_(:,i+1)=P(:,i+1)+M*(a0*x(:,i)+a2*v(:,i)+a3*a(:,i))+C*(a1*x(:,i)+a4*v(:,i)+a5*a(:,i));    x(:,i+1)=iK*P_(:,i+1);    a(:,i+1)=a0*(x(:,i+1)-x(:,i))-a2*v(:,i)-a3*a(:,i);    v(:,i+1)=v(:,i)+a6*a(:,i)+a7*a(:,i+1);end
  程序调用实例:三自由度系统的脉冲响应

clear;clcN=3;%Assemble mass matrixm=ones(N,1)*4e5;M=diag(m);%Assemble stiffness matrixk=ones(N,1)*2e8;
K(1,1)=k(1)+k(2);K(1,2)=-k(2);for i=2:N-1       K(i,i-1)=-k(i);       K(i,i)=k(i)+k(i+1);      K(i,i+1)=-k(i+1);endK(N,N-1)=-k(N);K(N,N)=k(N);%Assemble damping matrixac=0.7334;bc=0.0026;C=ac*M+bc*K;
x0(:,1)=0*ones(N,1);v0(:,1)=0*ones(N,1);a0(:,1)=0*ones(N,1);
RecordLength=1000; dt=0.01;
P=zeros(N,RecordLength); P(1,2)=1e5; =newmarkb(M,K,C,N,P,x0,v0,a0,dt,RecordLength);
  Wilson-θ法       Wilson- θ法的一般步骤:
  (1) 初始值计算
  ① 形成系统矩阵K,M和C

  ② 定初始值

  ③ 选择时间步长,并计算积分常数
  ④ 形成等效刚度
  ⑤ 将等效刚度进行三角分解

  (2) 对每一个时间步长
  ① 计算t+△t时刻的等效载荷
  ② 求解t+△t时刻的位移
  ③ 计算在t+△t时刻的加速度、速度和位移

  Wilson-θ法程序代码       仅供参考:

function =wilson(m,k,c,pt,u,u1,u2,n,theta,dertat) % by swell2005 %--------------- a0=6/((theta*dertat)^2); a1=3/(theta*dertat); a2=2*a1; a3=theta*dertat/2; a4=a0/theta; a5=-a2/theta; a6=1-3/theta; a7=dertat/2; a8=dertat^2/6; k=k+a0*m+a1*c; =ldl(k); %---------------- for i=0:n, pta=pt+m*(a0*u+a2*u1+2*u2)+c*(a1*u+2*u1+a3*u2); uaa=r\pta; uaa=s\uaa; uaa=r'\uaa; ua2(:,i+1)=a4*(uaa-u)+a5*u1+a6*u2; ua1(:,i+1)=u1+a7*(ua2(:,i+1)+u2); ua(:,i+1)=u+dertat*u1+a8*(ua2(:,i+1)+2*u2); u=ua(:,i+1); u1=ua1(:,i+1); u2=ua2(:,i+1); end
  本文摘录自百度文库《结构动力学方程常用数值解法》一文,程序来源于声振论坛。

页: [1]
查看完整版本: 动力学方程数值解法:直接积分法(Newmark类)