美文网首页
单质点阻尼系的地震反应(线性加速度法-MATLAB代码)

单质点阻尼系的地震反应(线性加速度法-MATLAB代码)

作者: 板撒 | 来源:发表于2017-06-12 23:47 被阅读0次
    function [acc,vel,dis]=sdof_response(h,f,dt,ddy)
    %sdof_response 计算单质点阻尼系的地震响应
    %   h=阻尼比
    %   f=频率(Hz)
    %   dt=采样间隔
    %   ddy=加速度时程
    
    % h=0.02;
    % f=50;
    % dt=0.01;
    % ddy=rand(1,1000);
    
    n_sample=length(ddy);
    acc=zeros(1,n_sample);  %反应加速度时程
    vel=zeros(1,n_sample);  %反应速度时程
    dis=zeros(1,n_sample);  %反应位移时程
    
    w=2*pi*f;
    w2=w*w;
    hw=h*w;
    wd=w*sqrt(1-h*h);
    wdt=wd*dt;
    E=exp(-hw*dt);
    cwdt=cos(wdt);
    swdt=sin(wdt);
    a11=E*(cwdt+hw*swdt/wd);
    a12=E*swdt/wd;
    a21=-E*w2*swdt/wd;
    a22=E*(cwdt-hw*swdt/wd);
    
    s1=2*h/w2/w/dt;
    s2=(1-2*h*h)/w2/wdt;
    s3=1/w2/dt;
    s4=h/w/wdt;
    b11=E*((1/w2+s1)*cwdt+(h/w/wd-s2)*swdt)-s1;
    b12=E*(-s1*cwdt+s2*swdt)-1/w2+s1;
    b21=E*(-s3*cwdt-(s4+1/wd)*swdt)+s3;
    b22=E*(s3*cwdt+s4*swdt)-s3;
    
    acc(1)=2*hw*ddy(1)*dt;
    vel(1)=-ddy(1)*dt;
    dis(1)=0;
    
    for i=2:n_sample
        dis(i)=a11*dis(i-1)+a12*vel(i-1)+b11*ddy(i-1)+b12*ddy(i);
        vel(i)=a21*dis(i-1)+a22*vel(i-1)+b21*ddy(i-1)+b22*ddy(i);
        acc(i)=-2*hw*vel(i)-w2*dis(i);
    end
    

    相关文章

      网友评论

          本文标题:单质点阻尼系的地震反应(线性加速度法-MATLAB代码)

          本文链接:https://www.haomeiwen.com/subject/tavrqxtx.html