Duhamel积分、Fourier变换法、中心差分方法、Newmark法、功率谱法……傻傻分不清楚,相信有不少小伙伴像笔者一样好奇:这些方法精度如何,结果有什么特点?以下笔者将以单自由度弹性体系为例,对比这几种方法的精度。为了便于感兴趣的小伙伴重现,同时附上了Matlab代码。
算例为《结构动力学》(刘晶波主编)习题5.2
2 Fourier变换法Duhamel积分是一种时域分析方法,它将荷载分解为一系列脉冲,获得每一个脉冲作用下结构的反应,然后叠加每一脉冲作用下的反应得到结构总的反应。Duhamel积分方法以积分的方式给出了体系运动的解析表达式(忽略离散采样带来的误差的情况下),但从实际应用上看,当采用数值积分时,其计算效率不高,因为对于计算任一个时间点t的反应,积分都要从0积到t,而实际要计算一时间点系列,可能要几百到几千个点,计算量很大。因为使用了叠加原理,仅适用于线弹性分析。
Matlab程序如下:
function y=duhamel(dt)
%duhamel
m=17.5; %质量
k=875.5; %刚度
zeta=0.14138;%阻尼比
%dt=0.01; %时间步长
t0=0; %起始时间
t2=6.4; %结束时间
w0=sqrt(k/m);
w1=w0*sqrt(1-zeta^2);
t=t0:dt:t2;
y=t;
for i=1:(length(t))
x=linspace(t(1),t(i));
px=(100*x).*(x>=0&x<=0.4)+(80-100*x).*(x>0.4&x<0.8);
a=px.*exp(zeta*w0*x).*cos(w1*x);
A=trapz(x,a);
b=px.*exp(zeta*w0*x).*sin(w1*x);
B=trapz(x,b);
y(i)=exp(-zeta*w0*t(i))*(A*sin(w1*t(i))-B*cos(w1*t(i)))/(m*w1);
end
ymax=max(y)
figure
plot(t,y);
Fourier变换法是一种频域分析方法,其基本计算步骤是:
1)对外荷载做Fourier变换,得到外荷载的Fourier谱;
2)利用复频反应函数得到反应的频域解;
3)应用Fourier逆变换,得到反应的时域解。
在用频域法分析中涉及到两次Fourier变换,均为无穷域积分,特别是Fourier逆变换,被积函数是复数,有时涉及复杂的围道积分。当外荷载是复杂的时间函数(如地震动)时,用解析型的Fourier变换几乎是不可能的,实际计算中大量采用的是离散Fourier变换。因为使用了叠加原理,仅适用于线弹性分析。
Matlab程序如下:
function [un,tf]=qiaoFFT(dt,N)
% Fourier
%% 执行FFT点数为64
% 构建原信号
% dt=0.1;
% N=64;
t=[0:N-1]*dt; % 时间序列
xn=(100*t).*(t>=0&t<=0.4)+(80-100*t).*(t>0.4&t<0.8);
subplot(2,2,1)
plot(t,xn) % 绘出原始信号
xlabel('时间/s'),title('原始信号')
axis([0 6.4 0 50]) % 调整坐标范围
% FFT分析
NN=N; % 执行64点FFT
XN=fft(xn,NN); %
f0=1/(dt*NN); % 基频
f=[0:NN-1]*f0; % 频率序列
A=