中心差分法计算程序编程.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中心差分法计算程序编程

姓名:张泽伟 学号: 电话:

一、中心差分法程序原理说明

1.1 中心差分法思路

中心差分法的基本思路:是将运动方程中的速度向量和加速度向量用位移的某种组合来表示,将微分方程组的求解问题转化为代数方程组的求解问题,并在时间区间内求得每个微小时间区间的递推公式,进而求得整个时程的反应。

1.2 中心差分法原理

中心差分法只在相隔t ∆一些离散的时间区间内满足运动方程,其基于有限

差分代替位移对时间的求导(即速度和加速度),如果采用等时间步长,t t i ∆=∆,

则速度与加速度的中心差分近似为:

t u u u i i ∆-=

-+•211 (a) 21

12t u u u u i i i ∆+-=

-+•• (b) 而离散时间点的运动为

)

(),(),(i i i i i i t u u t u u t u u ••••••=== ( =i 0,1,2,3,……)

由体系运动方程为:0

)()()(=++•••t ku t u c t u m i (c) 将速度和加速度的差分近似公式(a )和式(b )代入式(c )可以得到i t 时

刻的运动方程:

02211211=+∆-+∆+--+-+i i i i i i ku t u u c t u u u m (d )

在(d )式中,假设i u 和1-i u 是已知的,即在i t 及i t 以前时刻的运动已知,则

可以把已知项移到方程的右边,整理得到:

12212)2()2()2(-+∆-∆-∆--=∆+∆i i i u t c t m u t m k u t c t m (e)

由式(e )就可以根据i t 及i t 以前时刻的运动,求得1+i t 时刻的运动,如果需

要可以用式(a )和式(b )求得体系的速度和加速度。

1.3 初始条件转化

假设给定的初始条件为

),0(),

0(00•

•==u u u u (g )

由式(g )确定1-u 。在零时刻速度和加速度的中心差分公式为:

t u u u ∆-=

-•2110 (h ) ` 21

0102t u u u u ∆+-=-•• (i )

将式(i )消去1u 得:020012•••-∆+∆-=u t u t u u (j )

而零时刻的加速度值0••u 可以用t =0时的运动方程

0000=++•••ku u c u m

确定 即 )(1000ku u c m u --=••

• (k ) 这样就可以根据初始条件

00,•u u 和初始荷载0P ,就可以根据上式确定1-u 的

值。 1.4 中心差分法编程思路

① 基本数据准备和初始条件计算:

)(1000ku u c m u --=••

• 020012•••

-∆+∆-=u t u t u u ② 计算等效刚度和中心差分计算公式中的相关系数:

t c t m k ∆+∆=22

22t m

k a ∆-

= t c t

m b ∆-∆=22 ③ 根据i t 及i t 以前时刻的运动,计算1+i t 时刻的运动: 1---=i i bu au P

k P u i =+1

t u u u i i ∆-=

-+•211 21

12t u u u u i i i ∆+-=-+••

④ 下一步计算用i+1代替i ,对于线弹性结构体系,重复第3步,对于非线性结构体系,重复第2步和第3步。

1.5 中心差分法稳定条件

以上为中心差分法逐步计算公式,其具有2阶精度,即误差

)(02t ∆∝ε;并且为有条件稳定,稳定条件为: πn

T t ≤∆

二、程序框图

根据中心差分法的原理,可以得出本程序的主要程序思想,以下面框图的形式展示出来:

三、程序清单

%m,k,c分别为质量、刚度、阻尼

%p0,dt,t分别为外荷载幅值、时间步距、总时间

%u0,v0为初始条件初位移和初速度

%u,v,ac分别为位移、速度、加速度反应

ek=等效刚度;p=荷载;ep=等效荷载

%定义矩阵X0=input('请按格式和顺序输入初始矩阵,如X0=[m,k,c,u0,v0,t,P0,dt],

m=X0(1,1);k=X0(1,2);c=X0(1,3);u0=X0(1,4); %分别取出其中的参数:

v0=X0(1,5);t=X0(1,6);P0=X0(1,7);dt=X0(1,8)

t=[0:dt:t]; %将时间分步,采用等时间步长;

[mm,nn]=size(t); %计算t的向量长度,得出步数;

u=zeros(size(t)); %设定存储u的矩阵;

v=zeros(size(t)); %设定存储v的矩阵;

ac=zeros(size(t)); %设定存储ac的矩阵;

u(:,2)=u0; %赋值向量第2项为u0;

v(:,2)=v0; %赋值向量第2项为v0;

ac(:,2)=(P0-c*v(:,2)-k*u(:,2))/m; %求出初始加速度ac0;

u(:,1)=u(:,2)-dt*v(:,2)+((dt)^2)*ac(:,2)/2; %计算初始条件u-1项;

ek=m/(dt^2)+c/(2*dt); %计算等效刚度;

a=k-(2*m)/(dt^2);

b=m/(dt^2)-c/(2*dt); %计算方程系数;

p(:,2)=P0*sin(0); %给出初始荷载条件;

ep(:,2)=p(:,2)-a*u(:,2)-b*u(:,1); %计算初始等效荷载;

u(:,3)=ep(:,2)/ek; %计算位移u1=u(:,3)

for i=3:nn %从第二项开始进行中心差分法计算;

p(:,i)=P0*sin(.5*pi*(i-2)*dt); %给出荷载条件,按照简谐荷载计算;

ep(:,i)=p(:,i)-a*u(:,i)-b*u(:,i-1); %计算等效荷载;

%-----------------------得出所需要结果----------------------------------%

u(:,i+1)=ep(:,i)/ek; %计算位移量;

v(:,i)=(u(:,i+1)-u(:,i-1))/(2*dt); %计算速度量;

ac(:,i)=(u(:,i+1)-2*u(:,i)+u(:,i-1))/(dt^2); %计算加速度量;

end

t=t(:,1:end-1);u=u(:,2:end-1);v=v(:,2:end);ac=ac(:,2:end);p=p(:,2:end);ep=ep(:,2:end);

%------------------------绘制位移、速度、加速度时程曲线-----------------------%

%plot(t,u,'b-o'),hold on,plot(t,v,'g--p'),hold on,plot(t,ac,'r:x'),grid on,xlabel('时间(s)'),ylabel('位移(m)速度(m/s)加速度(m/s^2)'),title('顶层u,v,ac的时程曲线');

subplot(3,1,1),plot(t,u,'b-'),grid,xlabel('时间(s)'),ylabel('位移(m)'),

title('位移u的时程曲线');legend('位移u')

相关文档
最新文档