MATLAB程序精确法求解反应谱

合集下载

9种谱校正方法及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作为一种强大的科学计算软件,也提供了丰富的工具和函数用于求解微分方程,本文将介绍一些常见的使用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地震反应谱数值算法的稳定性和精度分析摘要:地震反应谱是进行结构抗震分析与设计的重要工具,反应谱的计算在反应谱法和时域逐步积分方法中有重要地位,引起了学者的重视和广泛研究。

而对计算方法优劣的评定常取决于其计算的耗时、稳定性和精度等因素。

本文基于数值算法的相关研究及应用现状,以MATLAB为平台,建立数值算法在不同影响因素下的三维图形,并结合理论进行对比分析。

通过算例进一步分析验证,得出不同数值算法在实际计算中的表现,为工程实际计算中选取哪种积分算法更为合适提供参考。

关键词:地震反应谱;时域逐步积分算法;稳定性和精度;MATLAB1、地震反应谱的基本假定地震反应谱基于的三个基本假设[1]:(1)结构物所处的地面假定为刚性面,认为体系各质点的运动是完全一致的。

(2)强震观测仪的记录为地面运动的过程。

(3)结构体系不能是双或多质点体系,必须是单质点体系;同时应是弹性体系状态。

这里所谓的单自由度体系结构,就是用无量刚的弹性杆件支承于地面上,将结构体系中参与振动的质量用一点表示。

同时,假定结构振动和地面运动不发生扭转,只是水平平移运动并且是单方向的。

2、基于MATLAB地震反应谱数值算法的稳定性和精度分析2.1 概述目前MATLAB地震反应谱数值理论算法主要有中心差分法[2]、Wilson-法、Houbolt法、线性加速度法及Newmark-法等,理论算法主要是以求解线性结构体系动力方程时所表现出的特性作为数值算法优劣的评价依据[3],但是在实际工程运用中,人们常常凭借经验来判定选取较为合适的积分方法。

随着工程问题越来越复杂,在对大型复杂结构的结构动力反应分析更为复杂,要求高效率计算情况下获得较精确地计算结果。

然而各计算方法的精度和稳定性对结构动力反应分析的发————————————E-mail:skyuanyan@展引起了很大的影响和制约[4]。

2.2数值算法的稳定性分析基于上述情况,本文对上述几种常用数值算法的稳定性方面通过图形进行比较分析,并结合算例进一步验证分析。

matlab地震反应谱

matlab地震反应谱

matlab地震反应谱摘要:I.引言- 介绍Matlab 在地震工程领域的应用- 介绍本文的主要内容II.地震反应谱的计算方法- 加载地震波数据- 预处理地震波数据- 计算地震波数据的频谱- 计算地震反应谱III.地震反应谱的分析方法- 评估结构的地震响应特性- 为地震工程设计提供依据IV.结论- 总结Matlab 在地震反应谱计算中的应用- 展望未来可能的研究方向正文:Matlab 是一种功能强大的数学软件,可以用于解决各种工程和科学问题。

在地震工程领域,Matlab 可以用于计算地震反应谱,从而评估结构的地震响应。

本文将介绍如何使用Matlab 计算地震反应谱,以及如何根据反应谱分析结构的地震响应。

首先,我们需要加载地震波数据。

可以使用Matlab 内置的函数fiducial() 从文件中读取地震波数据,也可以使用自定义函数从其他来源获取数据。

接下来,我们需要对地震波数据进行预处理,以去除噪声和异常值。

可以使用Matlab 内置的函数removeoutliers() 对数据进行去噪处理。

然后,我们可以使用Matlab 内置的函数freqz() 计算地震波数据的频谱。

通过频谱,我们可以了解地震波的频率分量以及振幅。

最后,我们可以使用Matlab 内置的函数responsespectrum() 计算地震反应谱。

该函数可以根据结构的阻尼比和自振周期计算反应谱。

通过反应谱,我们可以了解结构在不同地震波作用下的加速度响应。

综上所述,Matlab 可以用于计算地震反应谱,从而评估结构的地震响应。

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源码】

毕业论文(设计)题目学院学院专业学生姓名学号年级级指导教师教务处制表基于MATLAB的地震反应谱计算方法的比较一、程序说明本团队长期从事matlab编程与仿真工作,擅长各类毕业设计、数据处理、图表绘制、理论分析等,程序代做、数据分析具体信息联系二、写作思路与程序示例地震反应谱是进行结构抗震分析与设计的重要工具,反应谱的计算在反应谱法和时域逐步积分方法中有重要地位,引起了学者的重视和广泛研究。

而对计算方法优劣的评定常取决于其计算的耗时、稳定性和精度等因素。

目前,计算反应谱的方法有很多,以往常规方法主要有中心差分法、Newmark-法、线性加速度法及Wilson-法等,这些方法虽然存在一些弊端,但是其计算精度能够满足一般实际工程计算的需要,仍被广泛应用于工程实践。

因此有必要对这些方法进行深入的比较和探讨。

目前,我国现行建筑抗震设计规范中对阻尼比规定:混凝土结构通常取0.05,钢结构通常取0.02,阻尼比均比较小,因此利用拟反应谱是可靠的。

然而,随着高层和超高层的出现,建筑新形式、新材料的使用、隔震、减震耗能机构的研究以及抗震减灾新要求的不断提出,传统理论也越来越不能适应新要求,使用拟反应谱可能带来较大误差,这应当引起我们的注意。

同时,通过反应谱理论分析得到:当周期超过3s以后,结构地震反应已不是由地面加速度控制,而可能是由速度甚至是位移控制。

然而,现代的超大跨、超高层和巨型结构的自振周期大都达到了10s以上,如果仍然采用加速度谱来对其进行分析将不合适。

我们应当采用能更好反应三个周期段的反应谱来对长周期结构进行分析,而三联反应谱就具有这一特点,它是将位移、速度以及加速度联合反应谱同时表示在一张图上的四坐标对数图,能够使我们更直接地掌握上述三种物理量与结构自振周期之间的控制关系。

因此,采用MATLAB的GUI编程三联反应谱图形界面,并将其应用于工程实践,将是一项很有意义的工作。

论文基于以上内容,主要进行了以下具体工作:1.基于数值算法的相关研究及应用现状,本文以MATLAB为平台,建立数值算法在不同影响因素下的三维图形,并结合理论对比分析。

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计算分析,我们可以得到标准加速度反应谱峰值、相对加速度谱峰值的数值,这些数据可以用来确定地震动的相关模型及其关键参数。

此外,傅里叶谱表示地震波的重要意义还体现在两个方面:一是检出时间过程中所含的频率分量,二是进行时域到频域的变换。

通过傅里叶振幅谱的最大振幅值和其所对应的频率,我们可以进一步研究地震波动的特征和规律。

总的来说,MATLAB中的地震反应谱和傅里叶谱分析工具对于研究地震波的特征和规律具有重要意义,可以广泛应用于地震工程、结构抗震分析和设计等领域。

matlab中的谱方法

matlab中的谱方法

在MATLAB中,谱方法通常用于信号处理、频谱分析、滤波以及其他与频域相关的操作。

以下是一些常见的MATLAB函数和工具,用于实现谱方法:1. **傅立叶变换**:MATLAB提供了`fft`函数,用于计算信号的快速傅立叶变换(FFT)。

它允许你将信号从时域转换到频域。

```matlabX = fft(x);```2. **功率谱密度**:使用谱方法来估计信号的功率谱密度(PSD)。

`pwelch`和`periodogram`是两个常用的函数,用于估计信号的功率谱密度。

```matlab[Pxx, f] = pwelch(x, window, overlap, nfft, fs);```3. **滤波**:使用谱方法来设计和应用数字滤波器,以对信号进行滤波。

MATLAB中有一些滤波函数,如`filter`和`designfilt`。

```matlaby = filter(b, a, x);```4. **频域可视化**:使用`plot`等函数可以可视化频域数据,以便分析信号的频谱内容。

```matlabplot(f, 10*log10(Pxx));xlabel('Frequency (Hz)');ylabel('Power/Frequency (dB/Hz)');```5. **信号合成**:你可以使用逆傅立叶变换将频域信号合成回时域信号。

```matlabx_reconstructed = ifft(X);```这些是MATLAB中常见的一些谱方法的示例。

你可以根据你的具体需求和信号处理任务来选择合适的工具和函数。

MATLAB的文档和示例也可以提供更多帮助和指导。

方程组的各种解法法的Matlab程序及运行结果

方程组的各种解法法的Matlab程序及运行结果

1.列主元高斯消去法M文件function[x]=gauss(a,b)n=length(a);x=zeros(n,1);a=[a b];for k=1:n-1max=k;for i=k+1:nif a(i,k)>a(max,k)max=i;endendtemp=a(k,k:n+1);a(k,k:n+1)=a(max,k:n+1);a(max,k:n+1)=temp;for i=k+1:na(i,k)=-a(i,k)/a(k,k);a(i,k+1:n+1)=a(i,k+1:n+1)+a(i,k)*a(k,k+1:n+1);endendx(n,1)=a(n,n+1)/a(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+x(j,1)*a(i,j);endx(i,1)=(a(i,n+1)-sum)/a(i,i);endMatlab运行结果2.LU三角分解法M文件function y=LU(A,B);n=length(A);A=[A B];for k=1:n-1;for i=k:n;if(abs(A(i,k))==max(abs(A(k:n,k))))P(k)=i;temp=A(k,:);A(k,:)=A(i,:);A(i,:)=temp;endendfor j=k+1:n;A(j,k)=A(j,k)/A(k,k);A(j,k+1:n+1)=A(j,k+1:n+1)-A(j,k)*A(k,k+1:n+1);endendP(n)=n;L(1,1)=1;L(2:n,1)=A(2:n,1);L(1,2:n)=0;U(1,1)=A(1,1);U(2:n,1)=0;U(1,2:n)=A(1,2:n);for i=2:n;L(i,1:i-1)=A(i,1:i-1);L(i,i)=1;L(i,i+1:n)=0;U(i,1:i-1)=0;U(i,i:n)=A(i,i:n);endx(n) = A(n,n+1)/U(n,n);for k = n-1:-1:1x(k)=A(k,n+1);for p=n:-1:k+1;x(k) = x(k)-U(k,p)*x(p); endx(k)=x(k)/U(k,k);endxLUPEndMatlab运行结果3.龙贝格(Romberg)算法M文件function[t]=romberg(f,a,b,e)t=zeros(15,4);t(1,1)=(b-a)/2*(f(a)+f(b));for k=2:4sum=0;for i=1:2^(k-2)sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1));endt(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum;for i=2:kt(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1);endendfor k=5:15sum=0;for i=1:2^(k-2)sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1));endt(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum;for i=2:4t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1);endif k>6if abs(t(k,4)-t(k-1,4))<edisp(['答案',num2str(t(k,4))]);break;endendendif k>=15disp(['溢出']);endMatlab运行结果4.最小二乘法M文件function[a,max,det]=zuixiaoerchengfa(x,y,r) n=length(x);c=ones(n,r+1);for i=2:r+1for j=1:nc(j,i)=x(j)^(i-1);endendA=c'*c;b=c'*y';a=inv(A)*b;det=0;max=0;for i=1:nsum=a(1);for j=2:r+1sum=sum+a(j)*x(i)^(j-1);endcc=abs(y(i)-sum);if cc>maxmax=cc;enddet=det+cc^2;enddet=sqrt(det);Matlab运行结果§2.1.1 二分法的MATLAB主程序function [k,x,wuca,yx]=erfen(a,b,abtol)a(1)=a; b(1)=b;ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数if ya* yb>0,disp('注意:ya*yb>0,请重新调整区间端点a和b.'), returnendmax1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是向+方向取整∞for k=1: max1+1a;ya=fun(a); b;yb=fun(b); x=(a+b)/2;yx=fun(x); wuca=abs(b-a)/2; k=k-1;[k,a,b,x,wuca,ya,yb,yx]if yx==0a=x; b=x;elseif yb*yx>0b=x;yb=yx;elsea=x; ya=yx;endif b-a< abtol , return, endendk=max1; x; wuca; yx=fun(x);§2.1.2 不动点迭代法的MATLAB主程序function [k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax) x(1)=x0;for i=1: ddmaxx(i+1)=fun(x(i));piancha=abs(x(i+1)-x(i));xdpiancha=piancha/( abs(x(i+1))+eps);i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk]if (piancha<tol)|(xdpiancha< tol)k=i-1; xk=x(i);return;endendif i>ddmaxdisp('迭代次数超过给定的最大值ddmax')k=i-1; xk=x(i);yk=fun(x(i));[(i-1) piancha xdpiancha xk yk];return;endP=[(i-1),piancha,xdpiancha,xk,yk]';§2.1.3 艾特肯加速迭代法的MATLAB主程序function [k,xk,yk,p]= Aitken (x0,tol, ddmax)x(1)=x0;for i=1: ddmaxx1(i+1)=fun(x(i)); x2(i+1)=fun(x1(i+1));x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1))^2/(x2(i+1)-2*x1(i+1)+ x(i));piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps);i=i+1; xk=x(i);yk=fun(x(i));if (piancha<tol)|(xdpiancha<tol)k=i-1; xk=x(i); yk=fun(x(i));m=[0,1:i-1]; p=[m',x1',x2',x'];return;endendif i>ddmaxdisp('迭代次数超过给定的最大值ddmax')k=i-1; xk=x(i); yk=fun(x(i));m=[0,1:i-1]; p=[m',x1',x2',x'];return;endm=[0,1:i-1]; p=[m',x1',x2',x'];§2.1.4 牛顿切线法的MATLAB主程序function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax) x(1)=x0;for i=1: gxmaxx(i+1)=x(i)-fun(x(i))/(dfun(x(i))+eps);piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) xk yk piancha xdpiancha]if (abs(yk)<ftol)&((piancha<tol)|(xdpiancha< tol))k=i-1; xk=x(i);[(i-1) xk yk piancha xdpiancha]return;endendif i>gxmaxdisp('请注意:迭代次数超过给定的最大值gxmax。

MATLAB处理信号得到频谱、相谱、功率谱

MATLAB处理信号得到频谱、相谱、功率谱

第一:频谱一.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB进行谱分析时注意:(1)函数FFT返回值的数据结构具有对称性。

例:N=8;n=0:N-1;xn=[4 3 2 6 7 8 9 0];Xk=fft(xn)→Xk =39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 -7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929iXk与xn的维数相同,共有8个元素。

Xk的第一个数对应于直流分量,即频率值为0。

(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。

在IFFT时已经做了处理。

要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。

二.FFT应用举例例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。

采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;fs=100;N=128; %采样频率和数据点数n=0:N-1;t=n/fs; %时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求得Fourier变换后的振幅f=n*fs/N; %频率序列subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;%对信号采样数据为1024点的处理fs=100;N=1024;n=0:N-1;t=n/fs;x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求取Fourier变换的振幅f=n*fs/N;subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;subplot(2,2,4)plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;运行结果:fs=100Hz,Nyquist频率为fs/2=50Hz。

常用方法MATLAB求解(好)

常用方法MATLAB求解(好)
2
由图可看出可用二次多项式拟合。 再输入命令 : >> p=polyfit(x,y,2) p= 0.5614 0.8287 1.1560 即二次拟合多项式为 f ( x) 0.5614x2 0.8287 x 1.1560
3
画出离散点及拟合曲线: 输入命令 : >> x1=0.5:0.05:3.0; >> y1=polyval(p,x1); >> plot(x,y,'*r',x1,y1,'-b') 结果见图5.4
Pn ( x ) L i ( x ) y i
i 0
n
其中Li(x) 为n次多项式:
( x x 0 )( x x 1 ) ( x x i 1 )( x x i 1 ) ( x x n ) L i (x) ( x i x 0 )( x i x 1 ) ( x i x i 1 )( x i x i 1 ) ( x i x n )
mesh(x0,y0,temps) 结果见图5.6
分别用线性性插值和三次样条插值求已知点的温度。
输入命令 :
19
>> t=interp2(x0,y0,temps,[1.5 2 2.5 3.5],[1.5 1.6 2 4.5],'liner')
t=
76.2500 70.2000 62.0000 T= NaN
f ( x j ) y j ( j 0,1,n)
再用
f ( x) 计算插值,即 y f ( x ).
* *
y1 y0
y
*





x0 x1 x*
xn

反应谱计算方法四种

反应谱计算方法四种

反应谱计算方法四种1、MATLAB程序精确法求解反应谱-2008-04-06(本文程序仅供参考,请勿直接抄袭)2010/01/21 09:52.1.反应谱的概念反应谱是在1932年由引入的,它是用来描述地面运动及其对结构的效应的一种实用工具。

现在,反应谱作为地震工程的核心概念,提供了一种方便的手段概括所有可能的线性单自由度体系对地面运动的某个特定分量的峰值反应。

它还提供了一种实用的方法,将结构动力学的知识应用于结构的设计以及建筑规范中侧向力条文的制定。

某个反应量的峰值作为体系的固有振动周期Tn,(或者循环频率fn)那样的相关参数的函数图形,称为该反应量的反应谱。

每一个这样的图形针对的是有一个具有固定阻尼比的单自。

2、由度体系,多个具有不同阻尼比的这类图形联合起来就能覆盖实际结构中遇到的阻尼值范围。

2.反应谱的计算反应谱数值计算方法计算反应谱的方法有很多,又卷积计算法,傅立叶变换法,线性加速度法,中点加速度法,精确法等。

精确法本文中采用精确法做计算,该方法是和于1969年提出的,此法的出发点是把地面运动的加速度记录相邻点间的值用分段线性差值表示,从而获得地面运动的连续表达式。

基于方程本身基础上进行,得到的结果全部采用精确的分析方法,没有任何的舍入误差,也不会产生任何的截断误差,所谓精确法就是指在这个意义上式精确的而然。

正因为这种方法不会引起数值计算的误差,所以它有较高的精度,只要进行较少的运算就可以达到采。

3、用其他方法需要较多次运算才能达到的精度。

“由于在sohu博客上的文章发表后,陆续有问参考文献的邮件,因此将参考文献pdf版放上来供大家学习、参考,请勿用于商业目的。

下载链接见地震动的谱分析入门强震观测与分析原理(精确法求解)%反应谱精确法程序Begin With%clear%*读入地震记录*fid=fopen();Accelerate,count=fscanf(fid,%g);%count读入的记录的量Accelerate=*Accelerate;%单位统一为m和stime=0:(count-1)*;%单位s%*精确法计算各反应*%初始化各储存向量Disp。

matlab求解方程解析解

matlab求解方程解析解

matlab求解方程解析解用Matlab求解方程的解析解是一种常见的数学问题求解方法。

在数学领域中,方程是一种描述数学关系的等式,解析解是指通过代数运算得到的精确解。

Matlab是一种数值计算软件,具有强大的数学计算和编程能力,可以用来求解各种类型的方程。

在使用Matlab求解方程的过程中,首先需要明确要解的方程是什么类型的方程。

常见的方程类型包括线性方程、二次方程、高次方程、三角方程等。

不同类型的方程有不同的求解方法,需要根据具体情况选择合适的方法进行求解。

以线性方程为例,线性方程是一次方程,具有形如ax + b = 0的形式,其中a和b是已知的常数。

要求解这个方程,可以使用Matlab 中的solve函数来完成。

solve函数的基本语法是:solve(equation, variable),其中equation表示要解的方程,variable表示方程中的未知数。

对于线性方程来说,可以直接将方程作为字符串传递给solve函数即可。

例如,要求解方程2x + 3 = 0的解析解,可以使用以下代码:syms xequation = '2*x + 3 = 0';solution = solve(equation, x);上述代码中,先用syms函数声明变量x为符号变量,然后将方程2x + 3 = 0表示为字符串equation,最后调用solve函数求解方程的解析解。

运行上述代码后,可以得到方程的解析解为x = -3/2。

除了线性方程,Matlab还可以求解其他类型的方程。

例如,要求解二次方程ax^2 + bx + c = 0的解析解,可以使用roots函数来完成。

roots函数的基本语法是:roots(coefficient),其中coefficient表示二次方程中的系数。

对于二次方程来说,需要将系数a、b、c按照从高次到低次的顺序传递给roots函数。

例如,要求解方程x^2 - 5x + 6 = 0的解析解,可以使用以下代码:coefficient = [1, -5, 6];solution = roots(coefficient);上述代码中,将二次方程的系数[1, -5, 6]传递给roots函数,求解方程的解析解。

matlab地震波反应谱

matlab地震波反应谱

matlab地震波反应谱
地震波反应谱是地震工程中常用的一种分析方法,用于评估结构物在地震作用下的响应程度。

MATLAB可以用于计算地震波反应谱。

首先,需要获取地震波数据,可以通过地震台站记录或相关数据库获取。

然后,可以使用MATLAB的信号处理工具箱来处理地震波数据。

接下来,可以使用快速傅里叶变换(FFT)将地震波数据从时域转换为频域。

然后,可以计算地震波的功率谱密度,即频域中地震波的能量分布。

可以使用MATLAB的FFT函数和pwelch函数来实现这一步骤。

然后,可以根据地震波的功率谱密度计算地震波的加速度反应谱。

可以使用MATLAB的示例代码或自定义函数来计算加速度反应谱。

最后,可以通过绘制加速度反应谱曲线来分析和评估结构物的地震响应程度。

可以使用MATLAB的绘图函数(如plot)来绘制反应谱曲线。

总结起来,MATLAB可以用于计算地震波反应谱,包括处理地震波数据、计算功率谱密度和加速度反应谱,并绘制反应谱曲线。

matlab算法-求解微分方程数值解和解析解

matlab算法-求解微分方程数值解和解析解

MATLAB是一种用于数学计算、工程和科学应用程序开发的高级技术计算语言和交互式环境。

它被广泛应用于各种领域,尤其在工程和科学领域中被用于解决复杂的数学问题。

微分方程是许多工程和科学问题的基本数学描述,求解微分方程的数值解和解析解是MATLAB算法的一个重要应用。

1. 求解微分方程数值解在MATLAB中,可以使用各种数值方法来求解微分方程的数值解。

其中,常见的方法包括欧拉法、改进的欧拉法、四阶龙格-库塔法等。

这些数值方法可以通过编写MATLAB脚本来实现,从而得到微分方程的近似数值解。

以常微分方程为例,可以使用ode45函数来求解微分方程的数值解。

该函数是MATLAB中用于求解常微分方程初值问题的快速、鲁棒的数值方法,可以有效地得到微分方程的数值解。

2. 求解微分方程解析解除了求解微分方程的数值解外,MATLAB还可以用于求解微分方程的解析解。

对于一些特定类型的微分方程,可以使用符号计算工具箱中的函数来求解微分方程的解析解。

通过符号计算工具箱,可以对微分方程进行符号化处理,从而得到微分方程的解析解。

这对于研究微分方程的性质和特点非常有帮助,也有助于理论分析和验证数值解的准确性。

3. MATLAB算法应用举例在实际工程和科学应用中,MATLAB算法求解微分方程问题非常常见。

在控制系统设计中,经常需要对系统的动态特性进行分析和设计,这通常涉及到微分方程的建模和求解。

通过MATLAB算法,可以对系统的微分方程进行数值求解,从而得到系统的响应曲线和动态特性。

另外,在物理学、生物学、经济学等领域的建模和仿真中,也经常需要用到MATLAB算法来求解微分方程问题。

4. MATLAB算法优势相比于其他数学软件和编程语言,MATLAB在求解微分方程问题上具有明显的优势。

MATLAB提供了丰富的数值方法和工具,能够方便地对各种微分方程进行数值求解。

MATLAB具有直观的交互式界面和强大的绘图功能,能够直观地展示微分方程的数值解和解析解,有利于分析和理解问题。

matlab求newmark法位移反应谱

matlab求newmark法位移反应谱

Newmark法是一种用于求解线性动力学方程的数值算法。

在Matlab中,可以使用下面的步骤来求解位移反应谱:
1.输入物体的质量、刚度和阻尼系数,以及所施加的外力。

2.设定时间步长dt和Newmark法的参数β、γ。

3.初始化位移、速度和加速度的初始值。

4.在循环中,计算当前时刻的位移、速度和加速度,使用Newmark法的计算
公式。

5.在每个时刻结束时,将计算结果存储在数组中,以便后续绘图。

6.绘制位移反应谱图。

这里有一些Newmark法的计算公式:
位移: u(t+dt) = u(t) + dt*v(t) + (dt^2/2)*a(t)
速度: v(t+dt) = v(t) + (1-γ)*a(t)*dt
加速度: a(t+dt) = (f(t) - k u(t) - c v(t))/m
其中u(t)、v(t)、a(t)分别表示当前时刻的位移、速度和加速度;u(t+dt)、v(t+dt)、a(t+dt)分别表示下一时刻的位移、速度和加速度;f(t)表示当前时刻的外力;k、c、m分别表示刚度、阻尼系数和质量;dt表示时间步长;β、γ分别表示Newmark法的参数。

MATLAB微分方程几种求解方法及程序

MATLAB微分方程几种求解方法及程序

第五章 控制系统仿真§5.2 微分方程求解方法以一个自由振动系统实例为例进行讨论。

如下图1所示弹簧-阻尼系统,参数如下: M=5 kg, b=1 N.s/m, k=2 N/m, F=1NF图1 弹簧-阻尼系统假设初始条件为:00=t 时,将m 拉向右方,忽略小车的摩擦阻力,m x 0)0(= s m x /0)0(=•求系统的响应。

)用常微分方程的数值求解函数求解包括ode45、ode23、ode113、ode15s 、ode23s 等。

wffc1.m myfun1.m一、常微分方程的数值求解函数ode45求解 解:系统方程为 F kx x b x m =++•••这是一个单变量二阶常微分方程。

将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。

令: x x =)1( (位移))1()2(••==x x x (速度) 上式可表示成:⎥⎦⎤⎢⎣⎡--=⎥⎦⎤⎢⎣⎡=⎥⎥⎦⎤⎢⎢⎣⎡••)1(*20)2(*101)2()2()2()1(x x x x x x x 下面就可以进行程序的编制。

%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);1-10*x(2)-20*x(1)];% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,xx]=ode45(@myfun1,t,x0);plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') legend('位移','速度')title('微分方程的解 x(t)')二、方法2:F kx x b x m =++•••251)()()(2++==s s s F s X s G%用传递函数编程求解ksys1.mnum=1;den=[5 1 2];%printsys(num,den)%t=0:0.1:10;sys=tf(num,den);figure(1)step(sys)figure(2)impulse(sys)figure(3)t=[0:0.1:10]';ramp=t;lsim(sys,ramp,t);figure(4)tt=size(t);noise=rand(tt,1);lsim(sys,noise,t)figure(5)yy=0.1*t.^2;lsim(num,den,yy,t)w=logspace(-1,1,100)';[m p]=bode(num,den,w);figure(6)subplot(211);semilogx(w,20*log10(m)); grid onsubplot(212);semilogx(w,p)grid on[gm,pm,wpc,wgc]=margin(sys)figure(7)margin(sys)figure(8)nyquist(sys)figure(9)nichols(sys)方法3:F kx x b x m =++•••125=++•••x x xx x x 4.02.02.0--=•••% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,yy]=ode45(@myfun1,t,x0);figure(1)plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') hold onplot(tt,0.2-0.2*yy(:,2)-0.4*yy(:,1),'-.k ')legend('位移','速度','加速度') title('微分方程的解')figure(2)plot(yy(:,1),yy(:,2))title('平面相轨迹')%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);0.2-0.2*x(2)-0.4*x(1)];。

使用Matlab进行公式推导、求解

使用Matlab进行公式推导、求解

使用Matlab进行公式推导、求解MATLAB是一种强大的数值计算和科学编程软件,在MATLAB 中,可以使用其丰富的数学函数和符号计算工具进行公式推导和求解。

本文将以案例的形式介绍如何使用MATLAB进行公式推导和求解,包括符号计算、方程求解、微分和积分等方面的应用。

案例1:对以下公式进行“去括号展开”和“幂级数形式整理”(1)采用符号工具箱syms进行方程写入注意:代码建议写在实时编辑器中,这里语句都没有加分号,运行之后会直接显示结果如上图(2)“去括号展开”采用expand,“幂级数形式整理”采用series函数说明:"expand" 是 MATLAB 中用于展开代数表达式的一个函数。

它是 Symbolic Math Toolbox 的一部分。

当应用于符号表达式时,"expand" 函数会通过展开括号和简化项来展开表达式。

这在处理复杂的数学表达式或尝试简化和操作方程时非常有用。

"series" 是 MATLAB 中用于展开符号表达式的级数形式的一个函数。

它也属于 Symbolic Math Toolbox,提供了处理符号表达式和符号数学的功能,可以将符号表达式展开为指定的级数形式(‘order’后加展开到的最高指数),通常是泰勒级数。

它可以帮助在数学建模、分析和求解问题时处理复杂的表达式,并在需要时进行近似计算。

(3)案例完整代码clearsymsa0a1a2a3b0b1b2b3tt_ea=[a2;a1;a0];b=[b2;b1;b0] ;x(t)=[t^2t1]*a+a3*t*(t-t_e)^2y(t)=[t^2t1]*b+b3*t*(t-t_e)^2x(t)=expand(x)y(t)=expand(y)x(t)=series(x,t,'Ord er',4)y(t)=series(y,t,'Order',4)案例2:建立等式方程组,转换为线性矩阵表达式,然后求解(1)利用实时编辑器建立方程组我们定义了一些符号变量:a、b、x1、x2、y1、y2。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%。

相关文档
最新文档