MATLAB程序精确法求解反应谱
9种谱校正方法及matlab代码

9种谱校正方法及matlab 程序代码采样间隔归一化成1T ∆=,采样长度为N .这样FFT 离散谱线为0,1)i X i N =-(,相应的频率分辨率2/(1/)N f N ωπ∆=∆=. 设FFT 离散谱线局部极高谱线为m (为了数学上简洁,假定从0开始,注意在MATLAB 环境下数组实际操作的是从1开始),记频偏量δωδω=∆. 我们需要使用谱线m 和与之相邻一条次高谱线,记这连续两条谱线中左边一条序号为M (当次高谱线在m 左侧时1M m =-,反之M m =).下面列出若干算法的δ计算公式1. 加矩形窗的精确谱校正[1]i i i X U jV =+111()sin()()cos()M M M M opt M MV V M U U M K U U ωω+++-∆+-∆=- 1211cos()sin()cos()sin()opt M M opt M M K M Z V U M K M Z V U M ωωωωωω++-∆⎡⎤=+⎢⎥∆⎣⎦-∆+∆⎡⎤=+⎢⎥∆+∆⎣⎦ 2121cos()cos()()Z M Z M M m Z Z ωωωδ∆+∆-∆=+-- 2. 加矩形窗情形,采用解析单频模型的幅值比校正[1, 2]11||()||||M M M X M m X X δ++=+-+ 3. 加汉宁窗情形,采用解析单频模型的幅值比校正[1, 2]112||||()||||M M M M X X M m X X δ++-=+-+ 4. 加矩形窗情形,采用解析单频模型的复比值校正[3]11Re ()M M M X M m X X δ++⎛⎫=+- ⎪-⎝⎭5. 加汉宁窗情形,采用解析单频模型的复比值校正[3]112()M M M MX X M m X X δ+++=+-- 6. 加矩形窗情形,采用解析单频模型的复合复比值校正[3]11Re ()M m M M X M m X X δ++⎛⎫=+- ⎪-⎝⎭ 11m R m mX X X δ++=-,1111m m L m m m m X X X X X X δ---=-=-- 0.5)0.5)m L m R δδδδδ=-++((7. 加汉宁窗情形,采用解析单频模型的复合复比值校正[3]112Re ()M M m M M X X M m X X δ++⎛⎫+=+-⎪-⎝⎭ 112m m R m mX X X X δ+++=-,1111221m m m m L m m m m X X X X X X X X δ----++=-=-- 0.5)0.5)m L m R δδδδδ=-++((8. 加矩形窗,Quin 校正[4]11Re()Re(),Re()Re()m m L R m m X X X X αα-+== 11L R L R L Rααδδαα==---,, 00 R R L R δδδδδ>>⎧=⎨⎩当且其它9. 加汉宁窗,Quin 校正[4]11Re()Re(),Re()Re()m m L R m m X X X X αα-+== 212111L RL R L Rααδδαα++==---,,00 R R L R δδδδδ>>⎧=⎨⎩当且其它References1. Schoukens, J., R. Pintelon,H. Van Hamme. The interpolated fast Fourier transform: Acomparative study . IEEE Transactions on Instrumentation and Measurement. 1992, 41(2):226-232.2. 谢明,丁康. 频谱分析的校正方法.振动工程学报. 1994, 7(2): 172-179.3. 陈奎孚, 王建立,张森文. 频谱校正的复比值法.振动工程学报(已投). 2007.4. Quinn, B.G. Estimating frequency by interpolation using Fourier coefficients.IEEETransactions on Signal Processing. 1994, 42(5): 1264-1268.%========================这是调用调试==================DT=1;N=1024;PHI=pi/3;Ampl=1;CiR=11.9; %cycles in recordFreq=CiR/(DT*N); %frequencyTV=[0:N-1];DatVec=Ampl*cos(Freq*TV*2*pi+PHI);FV=fft(DatVec);figuresubplot(2,1,1);plot(TV,DatV ec);subplot(2,1,2);plot(abs(FV(1:round(N/2.56))));grid on[MV,MI]=max(abs(FV));%加矩形窗的解析校正--1FreqShift=SpecCorr(FV,MI,N,1);%加矩形窗的解析单频模型校正--2FreqShift=SpecCorr(FV,MI,N,2);%加汉宁窗的解析单频模型校正--3HanDat=DatVec.*hanning(N,'periodic')';FV=fft(HanDat);FreqShift=SpecCorr(FV,MI,N,3);%加矩形窗的解析单频模型校正+复比值法--4FV=fft(DatVec);FreqShift=SpecCorr(FV,MI,N,4);%加汉宁窗的解析单频模型校正+复比值法--5HanDat=DatVec.*hanning(N,'periodic')';FV=fft(HanDat);FreqShift=SpecCorr(FV,MI,N,5);%加矩形窗的解析单频模型校正+复比值法+左右平均--6FV=fft(DatVec);FreqShift=SpecCorr(FV,MI,N,6);%加汉宁窗的解析单频模型校正+复比值法+左右平均--7HanDat=DatVec.*hanning(N,'periodic')';FV=fft(HanDat);FreqShift=SpecCorr(FV,MI,N,7);%加矩形窗的解析单频模型校正+Quinn算法--8FV=fft(DatVec);FreqShift=SpecCorr(FV,MI,N,8);%加汉宁窗的解析单频模型校正+Quinn算法--9HanDat=DatVec.*hanning(N,'periodic')';FV=fft(HanDat);FreqShift=SpecCorr(FV,MI,N,9);===========这是子程序======================%spectrum correction assemble% the sampling interval is 1 s (or unitary)%Input: SpecVec--Discrte Fourier Spectrum from FFT% PeakIdx--the peak index, noting the matrix in MatLab start from 1% TL--the length (or the point number) of the FFT% method--correction method% output: PeakShift-- the corrected peak shifting from the peak in discrete% spectrumfunction PeakShift=SpecCorr(SpecVec,PeakIdx,TL,method)% picking up the second highest spectrum lineif(abs(SpecVec(PeakIdx-1))>abs(SpecVec(PeakIdx+1)))IP=[PeakIdx-1,PeakIdx];ShiftCorr=-1; %shift aligning with the PeakIdxelseIP=[PeakIdx,PeakIdx+1];ShiftCorr=0; %shift aligning with the PeakIdxendII=IP(1)-1; % noting that the index of a matrix in MATLAB starts from 1, not zero if(method==1) %an analyitic solution for rectangular windowU=real(SpecVec(IP));V=imag(SpecVec(IP));DW=2*pi/TL;KOPT=(sin(II*DW)*(V(2)-V(1))+cos(II*DW)*(U(2)-U(1)))/(U(2)-U(1));Z=V.*(KOPT-cos((IP-1)*DW))./(sin(DW*(IP-1)))+U;Tmp1=(Z(2)*cos(DW*(II+1))-Z(1)*cos(DW*II))/(Z(2)-Z(1));PeakPos=acos(Tmp1)/DW;PeakShift=PeakPos-(PeakIdx-1);elseif(method==2) %based on the analytical-single-tone model for rectangular window PeakShift=abs(SpecVec(IP(2)))/(abs(SpecVec(IP(2)))+abs(SpecVec(IP(1))));PeakShift=PeakShift+ShiftCorr; %shift aligning with the PeakIdxelseif(method==3) %based on the analytical-single-tone model for Hanning windowPeakShift=(2*abs(SpecVec(IP(2)))-abs(SpecV ec(IP(1))))/(abs(SpecV ec(IP(2)))+abs(SpecVec(IP(1 ))));PeakShift=PeakShift+ShiftCorr; %shift aligning with the PeakIdxelseif(method==4) %based on the analytical-single-tone model for rectangular window with complex correctionPeakShift=real(SpecVec(IP(2))/(SpecVec(IP(2))-SpecVec(IP(1))));PeakShift=PeakShift+ShiftCorr; %shift aligning with the PeakIdxelseif(method==5) %based on the analytical-single-tone model for Hanning window with complex correctionPeakShift=(2*SpecVec(IP(2))+SpecVec(IP(1)))/(SpecVec(IP(2))-SpecVec(IP(1)));PeakShift=real(PeakShift)+ShiftCorr; %shift aligning with the PeakIdx elseif(method==6) %based on the analytical-single-tone model for rectangular window with complex correction+averagePeakShift=real(SpecVec(IP(2))/(SpecVec(IP(2))-SpecVec(IP(1))));MaxPeakShift=PeakShift+ShiftCorr; %shift aligning with the PeakIdxLeftShift=real(SpecVec(PeakIdx)/(SpecVec(PeakIdx)-SpecVec(PeakIdx-1)))-1;RightShift=real(SpecVec(PeakIdx+1)/(SpecVec(PeakIdx+1)-SpecVec(PeakIdx)));%averagePeakShift=(0.5-MaxPeakShift)*LeftShift+(0.5+MaxPeakShift)*RightShift;elseif(method==7) %based on the analytical-single-tone model for Hanning window with complex correction+average,????PeakShift=(2*SpecVec(IP(2))+SpecVec(IP(1)))/(SpecVec(IP(2))-SpecVec(IP(1)));MaxPeakShift=real(PeakShift)+ShiftCorr; %shift aligning with the PeakIdxLeftShift=(2*SpecVec(PeakIdx)+SpecV ec(PeakIdx-1))/(SpecVec(PeakIdx)-SpecVec(PeakIdx-1))-1;RightShift=(2*SpecVec(PeakIdx+1)+SpecV ec(PeakIdx))/(SpecVec(PeakIdx+1)-SpecVec(PeakIdx ));%averagePeakShift=(0.5-MaxPeakShift)*LeftShift+(0.5+MaxPeakShift)*RightShift;elseif(method==8) %Quinn method for the rectangular windowa1 = real(SpecV ec(PeakIdx-1)/SpecVec(PeakIdx)); %lefta2 = real(SpecV ec(PeakIdx+1)/SpecVec(PeakIdx)); %rightLeftShift = a1/(1-a1);RightShift = -a2/(1-a2);if (LeftShift>0 & RightShift>0)PeakShift = RightShift;elsePeakShift = LeftShift;endelseif(method==9) %Quinn method for the Hanning windowa1 = real(SpecV ec(PeakIdx-1)/SpecVec(PeakIdx)); %lefta2 = real(SpecV ec(PeakIdx+1)/SpecVec(PeakIdx)); %rightLeftShift = (2*a1+1)/(1-a1);RightShift = -(2*a2+1)/(1-a2);if (LeftShift>0 & RightShift>0)PeakShift = RightShift;elsePeakShift = LeftShift;endendend。
使用Matlab进行微分方程求解的方法

使用Matlab进行微分方程求解的方法引言微分方程是数学中非常重要的一部分,广泛应用于物理、经济、工程等领域。
对于大部分微分方程的解析解往往难以求得,而数值解法则成为了一种常用的解决手段。
Matlab作为一种强大的科学计算软件,也提供了丰富的工具和函数用于求解微分方程,本文将介绍一些常见的使用Matlab进行微分方程求解的方法。
一、数值求解方法1. 欧拉方法欧拉方法是最简单的一种数值求解微分方程的方法,它将微分方程的微分项用差分的方式进行近似。
具体的公式为:y(n+1) = y(n) + hf(x(n), y(n))其中,y(n)表示近似解在第n个点的值,h为步长,f(x, y)为微分方程的右端项。
在Matlab中使用欧拉方法进行求解可以使用ode113函数,通过设定不同的步长,可以得到不同精度的数值解。
2. 中点法中点法是较为精确的一种数值求解微分方程的方法,它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)y(n+1) = y(n) + k2中点法通过计算两个斜率的平均值来得到下一个点的值,相较于欧拉方法,中点法能提供更精确的数值解。
3. 4阶龙格库塔法龙格库塔法是一类高阶数值求解微分方程的方法,其中4阶龙格库塔法是最常用的一种。
它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)k3 = hf(x(n) + h/2, y(n) + k2/2)k4 = hf(x(n) + h, y(n) + k3)y(n+1) = y(n) + (k1 + 2k2 + 2k3 + k4)/64阶龙格库塔法通过计算多个斜率的加权平均值来得到下一个点的值,相较于欧拉方法和中点法,它的精度更高。
二、Matlab函数和工具除了可以使用以上的数值方法进行微分方程求解之外,Matlab还提供了一些相关的函数和工具,方便用户进行微分方程的建模和求解。
基于MATLAB地震反应谱数值算法的稳定性和精度分析

基于MATLAB地震反应谱数值算法的稳定性和精度分析摘要:地震反应谱是进行结构抗震分析与设计的重要工具,反应谱的计算在反应谱法和时域逐步积分方法中有重要地位,引起了学者的重视和广泛研究。
而对计算方法优劣的评定常取决于其计算的耗时、稳定性和精度等因素。
本文基于数值算法的相关研究及应用现状,以MATLAB为平台,建立数值算法在不同影响因素下的三维图形,并结合理论进行对比分析。
通过算例进一步分析验证,得出不同数值算法在实际计算中的表现,为工程实际计算中选取哪种积分算法更为合适提供参考。
关键词:地震反应谱;时域逐步积分算法;稳定性和精度;MATLAB1、地震反应谱的基本假定地震反应谱基于的三个基本假设[1]:(1)结构物所处的地面假定为刚性面,认为体系各质点的运动是完全一致的。
(2)强震观测仪的记录为地面运动的过程。
(3)结构体系不能是双或多质点体系,必须是单质点体系;同时应是弹性体系状态。
这里所谓的单自由度体系结构,就是用无量刚的弹性杆件支承于地面上,将结构体系中参与振动的质量用一点表示。
同时,假定结构振动和地面运动不发生扭转,只是水平平移运动并且是单方向的。
2、基于MATLAB地震反应谱数值算法的稳定性和精度分析2.1 概述目前MATLAB地震反应谱数值理论算法主要有中心差分法[2]、Wilson-法、Houbolt法、线性加速度法及Newmark-法等,理论算法主要是以求解线性结构体系动力方程时所表现出的特性作为数值算法优劣的评价依据[3],但是在实际工程运用中,人们常常凭借经验来判定选取较为合适的积分方法。
随着工程问题越来越复杂,在对大型复杂结构的结构动力反应分析更为复杂,要求高效率计算情况下获得较精确地计算结果。
然而各计算方法的精度和稳定性对结构动力反应分析的发————————————E-mail:skyuanyan@展引起了很大的影响和制约[4]。
2.2数值算法的稳定性分析基于上述情况,本文对上述几种常用数值算法的稳定性方面通过图形进行比较分析,并结合算例进一步验证分析。
matlab地震反应谱

matlab地震反应谱摘要:I.引言- 介绍Matlab 在地震工程领域的应用- 介绍本文的主要内容II.地震反应谱的计算方法- 加载地震波数据- 预处理地震波数据- 计算地震波数据的频谱- 计算地震反应谱III.地震反应谱的分析方法- 评估结构的地震响应特性- 为地震工程设计提供依据IV.结论- 总结Matlab 在地震反应谱计算中的应用- 展望未来可能的研究方向正文:Matlab 是一种功能强大的数学软件,可以用于解决各种工程和科学问题。
在地震工程领域,Matlab 可以用于计算地震反应谱,从而评估结构的地震响应。
本文将介绍如何使用Matlab 计算地震反应谱,以及如何根据反应谱分析结构的地震响应。
首先,我们需要加载地震波数据。
可以使用Matlab 内置的函数fiducial() 从文件中读取地震波数据,也可以使用自定义函数从其他来源获取数据。
接下来,我们需要对地震波数据进行预处理,以去除噪声和异常值。
可以使用Matlab 内置的函数removeoutliers() 对数据进行去噪处理。
然后,我们可以使用Matlab 内置的函数freqz() 计算地震波数据的频谱。
通过频谱,我们可以了解地震波的频率分量以及振幅。
最后,我们可以使用Matlab 内置的函数responsespectrum() 计算地震反应谱。
该函数可以根据结构的阻尼比和自振周期计算反应谱。
通过反应谱,我们可以了解结构在不同地震波作用下的加速度响应。
综上所述,Matlab 可以用于计算地震反应谱,从而评估结构的地震响应。
matlab 实验四 信号的谱分析

实验四 信号的谱分析一、实验目的:1、 掌握DTFT 原理及其程序实现,学习用DTFT 对信号进行谱分析。
2、 掌握DFT 原理及其程序实现,学习用DFT 对信号进行谱分析。
3、 熟悉FFT 算法原理和掌握fft 子程序的应用。
4、 掌握DFT 的性质。
二、实验内容:1、 对于序列x(n)=[3,1,7,2,4],在-π ~ π内取64个频点,利用矩阵操作求其DTFT ,画出它的幅频特性和相频特性。
并把x(n)的位置零点右移一位,再求DTFT ,画出其幅频特性和相频特性,讨论移位对于DTFT 的影响。
2、 利用矩阵操作求1题中序列的DFT ,并画图。
3、 利用Matlab 自带的fft 函数求1题中序列的DFT ,并与1题中求出的DTFT 相比较。
4、 已知序列x(n)=[2,3,4,5]位于主值区间,求其循环左移一位的结果,画出循环移位的中间过程。
提示:左右各拓展一个周期,nx=[-4:7];采用stem 函数画图。
5、 已知序列x(n)=[1,2,3,4,5,6]位于主值区间,循环长度为8,确定并画出循环折叠y(n)=x((-n)8);如果循环长度为6,确定并画出循环折叠y(n)=x((-n)6)。
6、 已知序列x(n)=[2,1,5,3]位于主值区间,h(n)=nR 4(n),计算循环卷积1()()()c y n h n x n =⑥,2()()()c y n h n x n =⑩和线性卷积()()*()y n h n x n =,画出1()c y n 、2()c y n 和()y n 的波形图,观察循环卷积和线性卷积的关系。
三、实验报告要求:1.实验原理:序列x (n)的频谱定义为:nj n en x n x F j X ωω-∞-∞=∑==)())(()( πωπ≤≤-;也称为它的离散时间傅立叶变换。
可以认为,序列中的每一个样本x(n)对频谱产生的贡献为n j e n x ω-)( ,把整个序列中所有样本的频谱分量按向量(即复数)叠加起来,就得到序列的频谱X(j ω)。
基于matlab的地震反应谱计算方法的比较【matlab源码】

毕业论文(设计)题目学院学院专业学生姓名学号年级级指导教师教务处制表基于MATLAB的地震反应谱计算方法的比较一、程序说明本团队长期从事matlab编程与仿真工作,擅长各类毕业设计、数据处理、图表绘制、理论分析等,程序代做、数据分析具体信息联系二、写作思路与程序示例地震反应谱是进行结构抗震分析与设计的重要工具,反应谱的计算在反应谱法和时域逐步积分方法中有重要地位,引起了学者的重视和广泛研究。
而对计算方法优劣的评定常取决于其计算的耗时、稳定性和精度等因素。
目前,计算反应谱的方法有很多,以往常规方法主要有中心差分法、Newmark-法、线性加速度法及Wilson-法等,这些方法虽然存在一些弊端,但是其计算精度能够满足一般实际工程计算的需要,仍被广泛应用于工程实践。
因此有必要对这些方法进行深入的比较和探讨。
目前,我国现行建筑抗震设计规范中对阻尼比规定:混凝土结构通常取0.05,钢结构通常取0.02,阻尼比均比较小,因此利用拟反应谱是可靠的。
然而,随着高层和超高层的出现,建筑新形式、新材料的使用、隔震、减震耗能机构的研究以及抗震减灾新要求的不断提出,传统理论也越来越不能适应新要求,使用拟反应谱可能带来较大误差,这应当引起我们的注意。
同时,通过反应谱理论分析得到:当周期超过3s以后,结构地震反应已不是由地面加速度控制,而可能是由速度甚至是位移控制。
然而,现代的超大跨、超高层和巨型结构的自振周期大都达到了10s以上,如果仍然采用加速度谱来对其进行分析将不合适。
我们应当采用能更好反应三个周期段的反应谱来对长周期结构进行分析,而三联反应谱就具有这一特点,它是将位移、速度以及加速度联合反应谱同时表示在一张图上的四坐标对数图,能够使我们更直接地掌握上述三种物理量与结构自振周期之间的控制关系。
因此,采用MATLAB的GUI编程三联反应谱图形界面,并将其应用于工程实践,将是一项很有意义的工作。
论文基于以上内容,主要进行了以下具体工作:1.基于数值算法的相关研究及应用现状,本文以MATLAB为平台,建立数值算法在不同影响因素下的三维图形,并结合理论对比分析。
MATLAB求解反应谱

• for T=0.0035:0.0035:7; • omiga=2*pi/T; • A=[0 1;-omiga^2 -2*kesi*omiga]; • B=[0;-1]; • C=[0 1;-omiga^2 -2*kesi*omiga]; • D=[0;-1]; • y=lsim(A,B,C,D,xg/100,t); • velocity=y(:,2); • acce1_abs=-2*kesi*omiga*velocity-y(:,1)*omiga^2; • acce2_absmax(k)=max(abs(acce1_abs))/9.8; • k=k+1; • end
. .. x ( t ) x 得出 [ A] . B x g .. . x(t ) x 2 x 2 w x g 1 0 0 [ A] 2 , B 1 2 w
同时输出变量
y Z (t ) CZ (t )
可以得出
1 0 0 0 C ,D 0 1 0 0
在实际应用中,利用lsim命令求新疆台站100条地震动, 程序如下: clc,clear; xg=xlsread('48.xls') ; n=length(xg); t=0:0.0035:(n-1)*0.0035; TA=0.0035:0.0035:7;%反应谱横坐标 kesi=0.05;k=1;
. 。 x(t ) Z (t ) .. 为原式中的
x 2 x x x g
2
..
.
..
得出
. . x ( t ) x Z (t ) .. .. . x(t ) x 2 x 2 w x g .
matlab地震反应谱

在MATLAB中,地震反应谱的计算可以帮助我们更好地理解地震波动的特征和规律。
具体来说,地震反应谱可以表示地震动强度特性和频谱特性的关系,而傅里叶谱则可以用来检出时间过程中所含的频率分量并进行时域到频域的变换。
在MATLAB编程计算分析中,地震反应谱的特征参数包括平台值和特征周期。
平台值表示地震动的强度特性,特征周期则反映了地震动的频谱特性。
通过MATLAB计算分析,我们可以得到标准加速度反应谱峰值、相对加速度谱峰值的数值,这些数据可以用来确定地震动的相关模型及其关键参数。
此外,傅里叶谱表示地震波的重要意义还体现在两个方面:一是检出时间过程中所含的频率分量,二是进行时域到频域的变换。
通过傅里叶振幅谱的最大振幅值和其所对应的频率,我们可以进一步研究地震波动的特征和规律。
总的来说,MATLAB中的地震反应谱和傅里叶谱分析工具对于研究地震波的特征和规律具有重要意义,可以广泛应用于地震工程、结构抗震分析和设计等领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB程序精确法求解反应谱-2008-04-06(本文程序仅供参考,请勿直接抄袭)2010/01/21 09:52 .
1. 反应谱的概念
反应谱是在1932年由引入的,它是用来描述地面运动及其对结构的效应的一种实用工具。
现在,反应谱作为地震工程的核心概念,提供了一种方便的手段概括所有可能的线性单自由度体系对地面运动的某个特定分量的峰值反应。
它还提供了一种实用的方法,将结构动力学的知识应用于结构的设计以及建筑规范中侧向力条文的制定。
某个反应量的峰值作为体系的固有振动周期Tn,(或者循环频率fn)那样的相关参数的函数图形,称为该反应量的反应谱。
每一个这样的图形针对的是有一个具有固定阻尼比的单自由度体系,多个具有不同阻尼比的这类图形联合起来就能覆盖实际结构中遇到的阻尼值范围。
2. 反应谱的计算
反应谱数值计算方法
计算反应谱的方法有很多,又卷积计算法,傅立叶变换法,线性加速度法,中点加速度法,精确法等。
精确法
本文中采用精确法做计算,该方法是和于1969年提出的,此法的出发点是把地面运动的加速度记录相邻点间的值用分段线性差值表示,从而获得地面运动的连续表达式。
基于方程本身基础上进行,得到的结果全部采用精确的分析方法,没有任何的舍入误差,也不会产生任何的截断误差,所谓精确法就是指在这个意义上式精确的而然。
正因为这种方法不会引起数值计算的误差,所以它有较高的精度,只要进行较少的运算就可以达到采用其他方法需要较多次运算才能达到的精度。
由于在博客上的文章发表后,陆续有问参考文献的邮件,因此将参考文献版放上来供pdfsohu“大家学习、参考,请勿用于商业目的。
下载链接见强震观测与分析原理(精确法求解)地震动的谱分析入门%%%%%%%%%%%%%%%%%%%%% 反应谱精确法程序Begin
With %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
% ***********读入地震记录***********
fid = fopen('');
[Accelerate,count] = fscanf(fid,'%g'); %count 读入的记录的量
Accelerate=*Accelerate'; %单位统一为m和s
time=0::(count-1)*; %单位s
% ***********精确法计算各反应***********
初始化各储存向量%.
Displace=zeros(1,count); %相对位移
Velocity=zeros(1,count); %相对速度
AbsAcce=zeros(1,count); %绝对加速度
% ***********A,B矩阵***********
DampA=[0,,]; %三个阻尼比
TA=::6; %TA=::6; %结构周期
Dt=; %地震记录的步长
%记录计算得到的反应,MDis为某阻尼时最大相对位移,MVel为某阻尼
%时最大相对速度,MAcc某阻尼时最大绝对加速度,用于画图
MDis=zeros(3,length(TA));
MVel=zeros(3,length(TA));
MAcc=zeros(3,length(TA));
j=1; %在下一个循环中控制不同的阻尼比
for Damp=[0,,]
t=1; %在下一个循环中控制不同的结构自振周期
for T=::6
Frcy=2*pi/T ; %结构自振频率
DamFrcy=Frcy*sqrt(1-Damp*Damp); %计算公式化简
e_t=exp(-Damp*Frcy*Dt);
s=sin(DamFrcy*Dt);
c=cos(DamFrcy*Dt);
A=zeros(2,2);
A(1,1)=e_t*(s*Damp/sqrt(1-Damp*Damp)+c);
A(1,2)=e_t*s/DamFrcy;
A(2,1)=-Frcy*e_t*s/sqrt(1-Damp*Damp);
A(2,2)=e_t*(-s*Damp/sqrt(1-Damp*Damp)+c);
d_f=(2*Damp^2-1)/(Frcy^2*Dt); %计算公式化简
d_3t=Damp/(Frcy^3*Dt);
B=zeros(2,2);
B(1,1)=e_t*((d_f+Damp/Frcy)*s/DamFrcy+(2*d_3t+1/Frcy^2)*c)-2*d_3t;
B(1,2)=-e_t*(d_f*s/DamFrcy+2*d_3t*c)-1/Frcy^2+2*d_3t;
B(2,1)=e_t*((d_f+Damp/Frcy)*(c-Damp/sqrt(1-Damp^2)*s)-(2*d_3t+1/Frcy^2)*(Dam Frcy*s+Damp*Frcy*c))+1/(Frcy^2*Dt);
B(2,2)=e_t*(1/(Frcy^2*Dt)*c+s*Damp/(Frcy*DamFrcy*Dt))-1/(Frcy^2*Dt);
for i=1:(count-1) %根据地震记录,计算不同的反应
Displace(i+1)=A(1,1)*Displace(i)+A(1,2)*Velocity(i)+B(1,1)*Accelerate(i)+B(1,2)*Accel erate(i+1);
Velocity(i+1)=A(2,1)*Displace(i)+A(2,2)*Velocity(i)+B(2,1)*Accelerate(i)+B(2,2)
*Accelerate(i+1);
AbsAcce(i+1)=-2*Damp*Frcy*Velocity(i+1)-Frcy^2*Displace(i+1);
end
MDis(j,t)=max(abs(Displace));
MVel(j,t)=max(abs(Velocity));
if T==
MAcc(j,t)=max(abs(Accelerate));
else
MAcc(j,t)=max(abs(AbsAcce));
end
Displace=zeros(1,count);%初始化各储存向量,避免下次不同周期计算时引用到前一个周期的结果
Velocity=zeros(1,count);
AbsAcce=zeros(1,count);
t=t+1;
end
j=j+1;
end
% ***********PLOT***********
close all
figure %绘制地震记录图
plot(time(:),Accelerate(:))
title('PEER STRONG MOTION DATABASE RECORD--CHI010')
xlabel('time(s)')
ylabel('acceleration(g)')
grid
figure %绘制位移反应谱
plot(TA,MDis(1,:),'',TA,MDis(2,:),'-r',TA,MDis(3,:),':k')
title('Displacement')
xlabel('Tn(s)')
ylabel('Displacement(m)')
legend('ζ=0','ζ=','ζ=')
grid
figure %绘制速度反应谱
plot(TA,MVel(1,:),'',TA,MVel(2,:),'-r',TA,MVel(3,:),':k')
title('Velocity')
xlabel('Tn(s)')
ylabel('velocity(m/s)')
legend('ζ=0','ζ=','ζ=')
grid
绘制绝对加速度反应谱figure %.
plot(TA,MAcc(1,:),'',TA,MAcc(2,:),'-r',TA,MAcc(3,:),':k')
title('Absolute Acceleration')
xlabel('Tn(s)')
ylabel('absolute acceleration(m/s^2)')
legend('ζ=0','ζ=','ζ=')
grid
figure %绘制标准加速度反应谱
M=max(abs(Accelerate)); %地震记录最大值
plot(TA,MAcc(1,:)/M,'',TA,MAcc(2,:)/M,'-r',TA,MAcc(3,:)/M,':k')
title('Normalized Absolute Acceleration')
xlabel('Tn(s)')
ylabel('Normalized absolute acceleration')
legend('ζ=0','ζ=','ζ=')
grid
%%%%%%%%%%%%%%%%%%%%%
End
With %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%。