声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 行业应用 土木工程 查看内容

地震波时程转换成反应谱的matlab程序

2015-11-13 07:50| 发布者: aspen| 查看: 2457| 评论: 0|原作者: zxwflyer|来自: 声振论坛

摘要: 把地震波时程转换成反应谱的matlab程序
cuidazhe提供的Response Spectrum程序


%     ***********************************************
%     *** Response Spectrum By Duhamel Integral & *** 
%     ***   Newmark Linear Acceleration Method    ***
%     ***         Author:Yahong DENG (PHD)        ***
%     ***        Email:hoverdyh@zju.edu.cn        ***
%     ***           Chang'an University           ***
%     ***            2008.12.11  Xi'an            ***
%     ***********************************************
clc;
clear all;
close all hidden;
disp('***********************************************')
disp('*** Response Spectrum By Duhamel Integral & ***')
disp('***       Linear Acceleration Method        ***')
disp('***        Author:Yahong DENG (PHD)         ***')
disp('***       Email:hoverdyh@zju.edu.cn         ***')
disp('***          Chang An University            ***')
disp('***           2008.12.11  XiAn              ***')
disp('***********************************************')
disp('  ')
disp('-------------------- ')
disp('**  振动信号输入  ** ')
disp('-------------------- ')
disp('  ')
filenin=input('请输入数据文件名(*.txt/*.dat/*.*):','s');
fileid=fopen(filenin,'r');
sampfre=input('请输入数据采样频率:');
linsign=input('请输入数据起始行:');
for line=1:linsign-1
    tline=fgetl(fileid);
end
filesty=input('请选择数据列类型(1:全部(单列/多列) 2:多列中一列):');
if filesty==1
    vibsign=fscanf(fileid,'%f',inf);
    vibsign=vibsign';
else
    colnumb=input('请输入文件总列数:');
    colsign=input('请输入数据所在列数:');
    inpsign=fscanf(fileid,'%f',[colnumb,inf]);
    vibsign=inpsign(colsign,:);
end
signumb=length(vibsign);
time=(0:1/sampfre:(signumb-1)/sampfre);
maxsign=0;
for n=1:signumb
    if abs(vibsign(n))>maxsign
        maxsign=abs(vibsign(n));
        maxtime=time(n);
    end
end
disp(' ');
fprintf('---* 输入信号基本信息 *---\n');
fprintf('输入信号长度为:%d\n',signumb);
fprintf('输入信号持时为:%.3f (s)\n',(signumb-1)/sampfre);
fprintf('输入信号最大值(绝对值):%f\n',maxsign);
fprintf('输入信号最大值时间点:%.3f (s)\n',maxtime);
fprintf('--- 恭喜,成功读入数据!!! ---\n');
filesta=fclose(fileid);
disp('  ')
disp('---------------------- ')
disp('**  反应谱参数设置  ** ')
disp('---------------------- ')
disp('  ')
damnumb=input('请输入反应谱阻尼比个数(1-3):');
switch damnumb
    case 1
        damprat(1)=input('请输入阻尼比值(0-1):');
    case 2
        damprat(1)=input('请输入第一个阻尼比值(0-1):');
        damprat(2)=input('请输入第二个阻尼比值(0-1):');
    case 3
        damprat(1)=input('请输入第一个阻尼比值(0-1):');
        damprat(2)=input('请输入第二个阻尼比值(0-1):');
        damprat(3)=input('请输入第三个阻尼比值(0-1):');
end
haxisty=input('请选择反应谱计算点类型(1:等间距频率计算点 2:等间距周期计算点):');
switch haxisty
    case 1
        minfreq=input('请输入最小计算频率(一般可取0.1,且 > 0):');
        maxfreq=input('请输入最大计算频率(一般可取10-15):');
        delfreq=input('请输入计算频率间隔(一般可取0.01/0.02):');
        spenumb=round((maxfreq-minfreq)/delfreq)+1;
        freoper=(minfreq:delfreq:(spenumb-1)*delfreq+minfreq);
    case 2
        minperi=input('请输入最小计算周期(一般可取0.1,且 > 0):');
        maxperi=input('请输入最大计算周期(一般可取2-6):');
        delperi=input('请输入计算周期间隔(一般可取0.01/0.02):');
        spenumb=round((maxperi-minperi)/delperi)+1;
        freoper=(minperi:delperi:(spenumb-1)*delperi+minperi);
end
disp('  ')
disp('-------------------- ')
disp('**   反应谱计算   ** ')
disp('-------------------- ')
disp('  ')
compmet=input('请选择反应谱计算方法(1:杜哈姆积分卷积法(速度慢) 2:杜哈姆积分FFT法 3:纽马克线性加速度法(速度快,推荐)):');
oritime=cputime;
switch compmet
    case 1
        if haxisty==1
            for n=1:spenumb
                angfreq=2*pi*freoper(n);
                for m=1:damnumb
                    angfred(m)=angfreq*sqrt(1-damprat(m)^2);
                    termexp=exp(-damprat(m)*angfreq*time);
                    termsin=sin(time.*angfred(m)).*((1-2*damprat(m)^2)/(1-damprat(m)^2));
                    termcos=cos(time.*angfred(m)).*((2*damprat(m))/(sqrt(1-damprat(m)^2)));
                    uniresd=-1/angfred(m)*termexp.*sin(time.*angfred(m))/sampfre;
                    uniresv=-termexp.*(cos(time.*angfred(m))-damprat(m)*sin(time.*angfred(m))/sqrt(1-damprat(m)^2))/sampfre;
                    uniresa=angfred(m)*termexp.*(termsin+termcos)/sampfre;
                    dispspe(m,n)=max(abs(conv(vibsign,uniresd)));
                    velospe(m,n)=max(abs(conv(vibsign,uniresv)));
                    accespe(m,n)=max(abs(conv(vibsign,uniresa)));
                    accspeb(m,n)=accespe(m,n)/maxsign;
                    fftnumb=2^nextpow2(2*signumb);
                    uniafft=fft(uniresa,fftnumb);
                    signfft=fft(vibsign,fftnumb);
                    accespe1=real(ifft(uniafft.*signfft,fftnumb));
                    accespe2=accespe1(1:signumb);
                    accespe3=max(accespe2);
                end
                fprintf('共 %4d 个频率计算点,正在计算第  %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);     
        else
            for n=1:spenumb
                angfreq=2*pi/freoper(n);
                for m=1:damnumb
                    angfred(m)=angfreq*sqrt(1-damprat(m)^2);
                    termexp=exp(-damprat(m)*angfreq*time);
                    termsin=sin(time.*angfred(m)).*((1-2*damprat(m)^2)/(1-damprat(m)^2));
                    termcos=cos(time.*angfred(m)).*((2*damprat(m))/(sqrt(1-damprat(m)^2)));
                    uniresd=-1/angfred(m)*termexp.*sin(time.*angfred(m))/sampfre;
                    uniresv=-termexp.*(cos(time.*angfred(m))-damprat(m)*sin(time.*angfred(m))/sqrt(1-damprat(m)^2))/sampfre;
                    uniresa=angfred(m)*termexp.*(termsin+termcos)/sampfre;
                    dispspe(m,n)=max(abs(conv(vibsign,uniresd)));
                    velospe(m,n)=max(abs(conv(vibsign,uniresv)));
                    accespe(m,n)=max(abs(conv(vibsign,uniresa)));
                    accspeb(m,n)=accespe(m,n)/maxsign;
                end   
            fprintf('共 %4d 个周期计算点,正在计算第   %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);
        end
    case 2
        fftnumb=2^nextpow2(2*signumb-1);
        if haxisty==1
            for n=1:spenumb
                angfreq=2*pi*freoper(n);
                for m=1:damnumb
                    angfred(m)=angfreq*sqrt(1-damprat(m)^2);
                    termexp=exp(-damprat(m)*angfreq*time);
                    termsin=sin(time.*angfred(m)).*((1-2*damprat(m)^2)/(1-damprat(m)^2));
                    termcos=cos(time.*angfred(m)).*((2*damprat(m))/(sqrt(1-damprat(m)^2)));
                    uniresd=-1/angfred(m)*termexp.*sin(time.*angfred(m))/sampfre;
                    uniresv=-termexp.*(cos(time.*angfred(m))-damprat(m)*sin(time.*angfred(m))/sqrt(1-damprat(m)^2))/sampfre;
                    uniresa=angfred(m)*termexp.*(termsin+termcos)/sampfre;
                    fftunid=fft(uniresd,fftnumb);
                    fftuniv=fft(uniresv,fftnumb);
                    fftunia=fft(uniresa,fftnumb);
                    fftsign=fft(vibsign,fftnumb);
                    dispspt=real(ifft(fftunid.*fftsign,fftnumb));
                    accespe(m,n)=max(dispspt(1:signumb));
                    velospt=real(ifft(fftuniv.*fftsign,fftnumb));
                    velospe(m,n)=max(velospt(1:signumb));
                    accespt=real(ifft(fftunia.*fftsign,fftnumb));
                    accespe(m,n)=max(accespt(1:signumb));
                    accspeb(m,n)=accespe(m,n)/maxsign;
                end
                fprintf('共 %4d 个频率计算点,正在计算第  %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);     
        else
            for n=1:spenumb
                angfreq=2*pi/freoper(n);
                for m=1:damnumb
                    angfred(m)=angfreq*sqrt(1-damprat(m)^2);
                    termexp=exp(-damprat(m)*angfreq*time);
                    termsin=sin(time.*angfred(m)).*((1-2*damprat(m)^2)/(1-damprat(m)^2));
                    termcos=cos(time.*angfred(m)).*((2*damprat(m))/(sqrt(1-damprat(m)^2)));
                    uniresd=-1/angfred(m)*termexp.*sin(time.*angfred(m))/sampfre;
                    uniresv=-termexp.*(cos(time.*angfred(m))-damprat(m)*sin(time.*angfred(m))/sqrt(1-damprat(m)^2))/sampfre;
                    uniresa=angfred(m)*termexp.*(termsin+termcos)/sampfre;
                    fftunid=fft(uniresd,fftnumb);
                    fftuniv=fft(uniresv,fftnumb);
                    fftunia=fft(uniresa,fftnumb);
                    fftsign=fft(vibsign,fftnumb);
                    dispspt=real(ifft(fftunid.*fftsign,fftnumb));
                    accespe(m,n)=max(dispspt(1:signumb));
                    velospt=real(ifft(fftuniv.*fftsign,fftnumb));
                    velospe(m,n)=max(velospt(1:signumb));
                    accespt=real(ifft(fftunia.*fftsign,fftnumb));
                    accespe(m,n)=max(accespt(1:signumb));
                    accspeb(m,n)=accespe(m,n)/maxsign;
                end   
            fprintf('共 %4d 个周期计算点,正在计算第   %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);
        end
    case 3
        if haxisty==1
            for n=1:spenumb
                angfreq=2*pi*freoper(n);
                deltime=1/sampfre;
                for m=1:damnumb
                    a(m)=angfreq*sqrt(1-damprat(m)^2)*deltime;
                    b(m)=damprat(m)*angfreq*deltime;
                    d(m)=sqrt(1-damprat(m)^2);
                    e(m)=exp(-b(m));
                    a11(m)=e(m)*(damprat(m)*sin(a(m))/d(m)+cos(a(m)));
                    a12(m)=e(m)*sin(a(m))/angfreq/d(m);
                    a21(m)=e(m)*(-angfreq)*sin(a(m))/d(m);
                    a22(m)=e(m)*(-damprat(m)*sin(a(m))/d(m)+cos(a(m)));
                    b11(m)=e(m)*((2*damprat(m)^2-1+b(m))*sin(a(m))/angfreq^2/a(m)+(2*damprat(m)+angfreq*deltime)*cos(a(m))/angfreq^3/deltime)...
                           -2*damprat(m)/angfreq^3/deltime;
                    b12(m)=e(m)*((1-2*damprat(m)^2)*sin(a(m))/angfreq^2/a(m)-2*damprat(m)*cos(a(m))/angfreq^3/deltime)...
                           -1/angfreq^2+2*damprat(m)/angfreq^3/deltime;
                    b21(m)=e(m)*((-damprat(m)-angfreq*deltime)*sin(a(m))/angfreq/a(m)-cos(a(m))/angfreq^2/deltime)+1/angfreq^2/deltime;
                    b22(m)=e(m)*(damprat(m)*sin(a(m))/angfreq/a(m)+cos(a(m))/angfreq^2/deltime)-1/angfreq^2/deltime;
                    tempdis(m,1)=0;
                    tempvel(m,1)=0;
                    tempacc(m,1)=0;
                     for k=2:signumb
                         tempdis(m,k)=a11(m)*tempdis(m,k-1)+a12(m)*tempvel(m,k-1)+b11(m)*vibsign(k-1)+b12(m)*vibsign(k);
                         tempvel(m,k)=a21(m)*tempdis(m,k-1)+a22(m)*tempvel(m,k-1)+b21(m)*vibsign(k-1)+b22(m)*vibsign(k);
                         tempacc(m,k)=-(2*damprat(m)*angfreq.*tempvel(m,k)+angfreq^2.*tempdis(m,k)); 
                     end
                     dispspe(m,n)=max(abs(tempdis(m,:)));
                     velospe(m,n)=max(abs(tempvel(m,:)));
                     accespe(m,n)=max(abs(tempacc(m,:)));
                     accspeb(m,n)=accespe(m,n)/maxsign;
                end
                fprintf('共 %4d 个频率计算点,正在计算第  %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);
        else
            for n=1:spenumb
                angfreq=2*pi/freoper(n);
                deltime=1/sampfre;
                for m=1:damnumb
                    a(m)=angfreq*sqrt(1-damprat(m)^2)*deltime;
                    b(m)=damprat(m)*angfreq*deltime;
                    d(m)=sqrt(1-damprat(m)^2);
                    e(m)=exp(-b(m));
                    a11(m)=e(m)*(damprat(m)*sin(a(m))/d(m)+cos(a(m)));
                    a12(m)=e(m)*sin(a(m))/angfreq/d(m);
                    a21(m)=e(m)*(-angfreq)*sin(a(m))/d(m);
                    a22(m)=e(m)*(-damprat(m)*sin(a(m))/d(m)+cos(a(m)));
                    b11(m)=e(m)*((2*damprat(m)^2-1+b(m))*sin(a(m))/angfreq^2/a(m)+(2*damprat(m)+angfreq*deltime)*cos(a(m))/angfreq^3/deltime)...
                           -2*damprat(m)/angfreq^3/deltime;
                    b12(m)=e(m)*((1-2*damprat(m)^2)*sin(a(m))/angfreq^2/a(m)-2*damprat(m)*cos(a(m))/angfreq^3/deltime)...
                           -1/angfreq^2+2*damprat(m)/angfreq^3/deltime;
                    b21(m)=e(m)*((-damprat(m)-angfreq*deltime)*sin(a(m))/angfreq/a(m)-cos(a(m))/angfreq^2/deltime)+1/angfreq^2/deltime;
                    b22(m)=e(m)*(damprat(m)*sin(a(m))/angfreq/a(m)+cos(a(m))/angfreq^2/deltime)-1/angfreq^2/deltime;
                    tempdis(m,1)=0;
                    tempvel(m,1)=0;
                    tempacc(m,1)=0;
                     for k=2:signumb
                         tempdis(m,k)=a11(m)*tempdis(m,k-1)+a12(m)*tempvel(m,k-1)+b11(m)*vibsign(k-1)+b12(m)*vibsign(k);
                         tempvel(m,k)=a21(m)*tempdis(m,k-1)+a22(m)*tempvel(m,k-1)+b21(m)*vibsign(k-1)+b22(m)*vibsign(k);
                         tempacc(m,k)=-(2*damprat(m)*angfreq*tempvel(m,k)+angfreq^2*tempdis(m,k)); 
                     end
                     dispspe(m,n)=max(abs(tempdis(m,:)));
                     velospe(m,n)=max(abs(tempvel(m,:)));
                     accespe(m,n)=max(abs(tempacc(m,:)));
                     accspeb(m,n)=accespe(m,n)/maxsign;
                end
                fprintf('共 %4d 个周期计算点,正在计算第  %4d  个点,任务完成率: %6.2f %%,请稍等!!!\n',spenumb,n,n/spenumb*100);
            end
            disp(' ')
            elatime=cputime-oritime;
            fprintf('--- 恭喜,位移/速度/加速度反应谱计算完成,共耗时: %6.2f 秒 !!!---\n',elatime);
        end       
end
disp('  ')
disp('------------------------ ')
disp('**  数据 & 图形 输出  ** ')
disp('------------------------ ')
disp('  ')
tempdat=date;
datyorn=input('请选择数据输出选项(0:不输出 1:仅输出位移谱 2:仅输出速度谱 3:仅输出加速度谱(含β谱) 4:输出所有谱):');
if datyorn==0
     disp('--- 没有生成数据文件!!!---')
 elseif datyorn==1
     fnout=input('请输入输出数据文件名(*.txt/*.dat/*.*):','s');
     fileid=fopen(fnout,'wt');
     switch damnumb
     case 1
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\n','# F/T','# D_Spectrum');
         fprintf(fileid,'* ------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\n',freoper(n),dispspe(1,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     case 2
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* --------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\n','# F/T','# D_Spectrum_1','# D_Spectrum_2');
         fprintf(fileid,'* --------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\n',freoper(n),dispspe(1,n),dispspe(2,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid); 
     case 3
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* -------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\n','# F/T','# D_Spectrum_1','# D_Spectrum_2','# D_Spectrum_3');
         fprintf(fileid,'* -------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),dispspe(1,n),dispspe(2,n),dispspe(3,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     end
 elseif datyorn==2
     fnout=input('请输入输出数据文件名(*.txt/*.dat/*.*):','s');
     fileid=fopen(fnout,'wt');
     switch damnumb
     case 1
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\n','# F/T','# V_Spectrum');
         fprintf(fileid,'* ------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\n',freoper(n),velospe(1,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     case 2
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ---------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\n','# F/T','# V_Spectrum_1','# V_Spectrum_2');
         fprintf(fileid,'* ---------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\n',freoper(n),velospe(1,n),velospe(2,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid); 
     case 3
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* --------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\n','# F/T','# V_Spectrum_1','# V_Spectrum_2','# V_Spectrum_3');
         fprintf(fileid,'* --------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),velospe(1,n),velospe(2,n),velospe(3,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     end
 elseif datyorn==3
     fnout=input('请输入输出数据文件名(*.txt/*.dat/*.*):','s');
     fileid=fopen(fnout,'wt');
     switch damnumb
     case 1
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* -----------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\n','# F/T','# A_Spectrum','# A_Spectrum_β');
         fprintf(fileid,'* -----------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\n',freoper(n),accespe(1,n),accspeb(1,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     case 2
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\t%15s\n','# F/T','# A_Spectrum_1','# A_Spectrum_1β','# A_Spectrum_2','# A_Spectrum_2β');
         fprintf(fileid,'* ------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),accespe(1,n),accspeb(1,n),accespe(2,n),accspeb(2,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid); 
     case 3
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ---------------------------------------------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\n','# F/T','# A_Spectrum_1','# A_Spectrum_1β','# A_Spectrum_2','# A_Spectrum_2β',...
                        '# A_Spectrum_3','# A_Spectrum_3β');
         fprintf(fileid,'* ----------------------------------------------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),accespe(1,n),accspeb(1,n),...
                     accespe(2,n),accspeb(2,n),accespe(3,n),accspeb(3,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
      end
  else
     fnout=input('请输入输出数据文件名(*.txt/*.dat/*.*):','s');
     fileid=fopen(fnout,'wt');
     switch damnumb
     case 1
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* --------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\n','# F/T','# D_Spectrum','# V_Spectrum','# A_Spectrum');
         fprintf(fileid,'* --------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),dispspe(1,n),velospe(1,n),accespe(1,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
     case 2
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* ----------------------------------------------------------------------------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\n','# F/T','# D_Spectrum_1','# D_Spectrum_2','# V_Spectrum_1','# V_Spectrum_2','# A_Spectrum_1','# A_Spectrum_2');
         fprintf(fileid,'* ----------------------------------------------------------------------------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),dispspe(1,n),dispspe(2,n),velospe(1,n),velospe(2,n),accespe(1,n),accespe(2,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid); 
     case 3
         fprintf(fileid,'* ------------------------------------\n');
         fprintf(fileid,'* OUTPUT FILE BY "RESPONSE_SPECTRUM.M"\n');
         fprintf(fileid,'* YAHONG DENG (PHD)\n');
         fprintf(fileid,'* CHANG_AN UNIVERSITY\n');
         fprintf(fileid,'* %s\n',tempdat);
         fprintf(fileid,'* DATA\n');
         fprintf(fileid,'* -------------------------------------------------------------------------------------------------------------------------------------------------------------\n');
         fprintf(fileid,'%8s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\t%15s\n','# F/T','# D_Spectrum_1','# D_Spectrum_2','# D_Spectrum_3',...
                        '# V_Spectrum_1','# V_Spectrum_2','# V_Spectrum_3','# A_Spectrum_1','# A_Spectrum_2','# A_Spectrum_3');
         fprintf(fileid,'* -------------------------------------------------------------------------------------------------------------------------------------------------------------\n');
         for n=1:spenumb
             fprintf(fileid,'%8.4f\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\t%15.6E\n',freoper(n),dispspe(1,n),dispspe(2,n),dispspe(3,n),...
                            velospe(1,n),velospe(2,n),velospe(3,n),accespe(1,n),accespe(2,n),accespe(3,n));
         end
         fprintf(fileid,'*DATAEND ');
         disp('--- 成功生成数据文件!!!---');
         filesta=fclose(fileid);
    end
end
disp('')
figyorn=input('请选择图形显示选项(0:不输出 1:仅输出位移谱 2:仅输出速度谱 3:仅输出加速度谱(含β谱) 4:输出所有谱):');
if figyorn==0
     disp(' ')
     disp('*******************************')
     disp('***   程序结束,谢谢使用!  ***')
     disp('*******************************')
     disp(' ')
 elseif figyorn==1
     for m=1:damnumb
         plot(freoper,dispspe(m,:));
         grid on;
         hold on;
     end
     xlabel('频率(Hz)/周期(Sec)');
     ylabel('幅值');
     title('位移反应谱曲线');
     disp('--- 成功生成曲线图形!!!---');
     disp(' ')
     disp('*******************************')
     disp('***   程序结束,谢谢使用!  ***')
     disp('*******************************')
     disp(' ')
 elseif figyorn==2
     for m=1:damnumb
         plot(freoper,velospe(m,:));
         grid on;
         hold on;
     end
     xlabel('频率(Hz)/周期(Sec)');
     ylabel('幅值');
     title('速度反应谱曲线');
     disp('--- 成功生成曲线图形!!!---');
     disp(' ')
     disp('*******************************')
     disp('***   程序结束,谢谢使用!  ***')
     disp('*******************************')
     disp(' ')
 elseif figyorn==3
     subplot(2,1,1)
     for m=1:damnumb
         plot(freoper,accespe(m,:),'r');
         grid on;
         hold on;
     end
     xlabel('频率(Hz)/周期(Sec)');
     ylabel('幅值');
     title('加速度反应谱曲线');
     legend('幅值谱 ');
     subplot(2,1,2)
     for m=1:damnumb
         plot(freoper,accspeb(m,:));
         grid on;
         hold on;
     end
     xlabel('频率(Hz)/周期(Sec)');
     ylabel('动力系数(β)');
     legend('动力放大系数(β)谱 ');
     disp('--- 成功生成曲线图形!!!---');
     disp(' ')
     disp('*******************************')
     disp('***   程序结束,谢谢使用!  ***')
     disp('*******************************')
     disp(' ')
 else
     subplot(3,1,1);
      for m=1:damnumb
          plot(freoper,dispspe(m,:));
          grid on;
          hold on;
      end
      xlabel('频率(Hz)/周期(Sec)');
      ylabel('位移谱值');
      title('位移/速度/加速度反应谱曲线');
     subplot(3,1,2)
      for m=1:damnumb
          plot(freoper,velospe(m,:));
          grid on;
          hold on;
      end
      xlabel('频率(Hz)/周期(Sec)');
      ylabel('速度谱值');
     subplot(3,1,3)
      for m=1:damnumb
          plot(freoper,accespe(m,:),'r');
          grid on;
          hold on;
      end
      xlabel('频率(Hz)/周期(Sec)');
      ylabel('加速度谱值');
      disp('--- 成功生成曲线图形!!!---');
     disp(' ')
     disp('*******************************')
     disp('***   程序结束,谢谢使用!  ***')
     disp('*******************************')
     disp(' ')
 end
12

最新评论

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2025-3-13 09:27 , Processed in 0.037603 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部