本帖最后由 ME! 于 2013-7-16 17:12 编辑
- [V1,D]=eig(K,M); % 计算特征值和特征向量
- Factor=diag(V1'*M*V1); %正则化质量矩阵
- Vnorm=V1*inv(sqrt(diag(Factor))); % 正则化振型向量(公式5.36即2.2-39)
- omega=diag(sqrt(Vnorm'*K*Vnorm)) ; % 固有频率w^2
- VnormM=diag(Vnorm'*M*Vnorm); %正则化模态质量
- Fnorm=Vnorm'*ff; % 模态力矢量
- tt=tt';
- [sdof,n1]=size(K);
- [nstep,n2]=size(tt);
- Modamp=Vnorm'*(ac*M+bc*K)*Vnorm; % 比例阻尼,正则坐标中的阻尼一般是对角阵
- zeta=diag((1/2)*Modamp*inv(diag(omega))); % 阻尼比 结构的动力特性和响应分析p39(公式2.2-61)
- %--------------------------------------------------------------------------
- % % (5) 模态坐标的脉冲响应
- %--------------------------------------------------------------------------
- eta0=Vnorm'*M*q0;
- deta0=Vnorm'*M*dq0; %2.2-53% 初始条件模态坐标的位移和速度
- eta=zeros(nstep,sdof); % %初始化位移2.2-52
- phase0=omega0*tt; %w*t omega0为激振力频率
- gama=omega0/omega(1); %omega0为激振力的圆频率,omega(i)=w,系统的无阻尼固有频率
- omegad=omega(1)*sqrt(1-zeta(1)^2);
- phase=omegad*tt; %wd*t其中(omegad为有阻尼固有频率)
- Exx=exp(-zeta(1)*omega(1)*tt); %中间变量
- C1=eta0(1); %初始位移
- C2=(deta0(1)+eta0(1)*zeta(1)*omega(1))/omegad; %中间变量
- X0=sqrt((1-gama^2)^2+(2*zeta(1)*gama)^2);
- XX=Fnorm(1)/(omega(1)^2*X0);
- XP=atan((2*zeta(1)*gama)/(1-gama^2));
- D1=(zeta(1)*omega(1)*cos(XP)+omega0*sin(XP))/omegad;
- D2=cos(XP);
- eta(:,1)=C1*Exx.*cos(phase)+C2*Exx.*sin(phase)...
- -XX*Exx.*(D1*sin(phase)+D2*cos(phase))...
- +XX*cos(phase0-XP);
- for i=2:sdof % t(i)时刻的响应
- gama=omega0/omega(i); %omega0为激振力的圆频率,omega(i)=w,系统的无阻尼固有频率
- omegad=omega(i)*sqrt(1-zeta(i)^2);
- phase=omegad*tt; %wd*t其中(omegad为有阻尼固有频率)
- Exx=exp(-zeta(i)*omega(i)*tt); %中间变量
- C1=eta0(i); %初始位移
- C2=(deta0(i)+eta0(i)*zeta(i)*omega(i))/omegad; %中间变量
- X0=sqrt((1-gama^2)^2+(2*zeta(i)*gama)^2);
- XX=Fnorm(i)/(omega(i)^2*X0);
- XP=atan((2*zeta(i)*gama)/(1-gama^2));
- D1=(zeta(i)*omega(i)*cos(XP)+omega0*sin(XP))/omegad;
- D2=cos(XP);
- eta(:,i)= eta(:,i-1)+C1*Exx.*cos(phase)+C2*Exx.*sin(phase)...
- -XX*Exx.*(D1*sin(phase)+D2*cos(phase))...
- +XX*cos(phase0-XP);
-
- end
-
- % 动态响应图
- %--------------------------------------------------------------------------
- eta=eta'; %模态坐标
- y=Vnorm*eta; %物理坐标
- figure(1)
- plot(tt,y(jth,:)) %某一自由度的响应
- xlabel('时间 (seconds)'), ylabel('位移 (m)')
- title('时间历程响应')
复制代码 先叠加再返回物理坐标
补充内容 (2013-7-17 16:16):
我觉得这样叠加时错误的 |