|
楼主 |
发表于 2015-4-8 22:43
|
显示全部楼层
本帖最后由 mxlzhenzhu 于 2015-4-9 08:56 编辑
我又问了一个愚蠢的问题,今天发现是因为编程的时候少加了一个.号造成的错误, 造成了正交性问题,结果让人浮想联翩;
MATLAB语法里面,转置和共轭转置是截然不同的概念,今日犯此错误算是刻骨铭心。先把前三种形式的复模态计算传函的MATLAB程序贴出来,感兴趣的可以看看,我的第四种矩阵形式的FRF计算就不再研究了。
- <p>%% 复模态分析案列
- %% mxl.2015-3-29
- %% 31日,计算结果不理想,暂时不搞了。
- %% 4月8日,共轭转置和转置是有严格区别的;
- clear
- close all
- clc</p><p>
- State_Choice='Second';</p><p>m1=1;m2=10;m3=5.3;m4=0.1;
- c1=10;c2=19;c3=0.8;c4=100;
- k1=1e6;k2=5e6;k3=2.5e5;k4=7e6;
- M=[
- m1,0,0;
- 0,m2,0;
- 0,0,m3;
- ];
- C=[
- c1,-c1,0;
- -c1,c1+c2,-c2;
- 0,-c2,c2+c3;
- ];
- K=[k1,-k1,0;
- -k1,k1+k2,-k2;
- 0,-k2,k2+k3;
- ];</p><p>
- % M=[
- % m1,0,0,0;
- % 0,m2,0,0;
- % 0,0,m3,0;
- % 0,0,0,m4;
- % ];
- % C=[
- % c1,-c1,0,0;
- % -c1,c1+c2,-c2,0;
- % 0,-c2,c2+c3,-c3;
- % 0,0,-c3,c4+c3;
- % ];
- % K=[k1,-k1,0,0;
- % -k1,k1+k2,-k2,0;
- % 0,-k2,k2+k3,-k3;
- % 0,0,-k3,k3+k4;
- % ];
- N=size(M,1);
- indicei=1;
- indicej=1;
- % %=====================================================================%
- % (1)State transform equation.
- % %=====================================================================%
- if strcmp(State_Choice,'First')
- A=[
- C,K;
- K,zeros(size(M));
- ];</p><p> B=[
- M,zeros(size(M));
- zeros(size(M)),-K;
- ];% I invented
- indiceii=indicei;
- indicejj=indicej+N;</p><p>elseif strcmp(State_Choice,'Second')
- A=[
- -M,zeros(size(M));
- zeros(size(M)),K;
- ];
-
- B=[
- zeros(size(M)),M;
- M,C;
- ];% Ji wen mei
- indiceii=indicei+N;
- indicejj=indicej+N;
- elseif strcmp(State_Choice,'Third')
- A=[
- K,zeros(size(M));
- zeros(size(M)),-M;
- ];
-
- B=[
- C,M;
- M,zeros(size(M))];% D.J.Ewins
- indiceii=indicei;
- indicejj=indicej;
- else
- B=[
- M,C;
- zeros(size(M)),M;
- ];
- A=[
- zeros(size(M)),K;
- -M,zeros(size(M));
- ];% my word
- indiceii=indicei;
- indicejj=indicej+N;
- end
- % %=====================================================================%
- % (2)Eigen Equ.
- % %=====================================================================%
- [V,D]=eig(A,-B);
- nameda=diag(D);
- % return
- % %=====================================================================%
- % (3)FRF, modal superpostion
- % %=====================================================================%</p><p>frequency=[2:2:800]';
- H=cell(size(frequency));
- % 基于复振型和复特征值计算FRF
- for loopi=1:numel(frequency)
- omega=2*pi*frequency(loopi);
- for loop=1:numel(nameda)
- ar=V(:,loop).'*B*V(:,loop);
- if loop>1
- H{loopi,1}=H{loopi,1}+V(:,loop)*V(:,loop).'/ar/(1j*omega-nameda(loop));
- else
- H{loopi,1}=V(:,loop)*V(:,loop).'/ar/(1j*omega-nameda(loop));
- end
- end
- end</p><p> </p><p> </p><p> </p><p>FRF=zeros(size(frequency));
- for loop=1:numel(frequency)
- FRF(loop,1)=H{loop,1}(indiceii,indicejj);
- end</p><p>figure
- subplot(2,1,1)
- plot(frequency,abs(FRF),'r')
- subplot(2,1,2)
- plot(frequency,angle(FRF),'k')
- % %=====================================================================%
- % (4)FRF, direct
- % %=====================================================================%
- omega=2*pi*frequency;
- H=cell(size(frequency));
- for loop=1:numel(frequency)
- H{loop,1}=inv(K-omega(loop)^2*M+1j*omega(loop)*C);
- end</p><p> </p><p>FRF=zeros(size(frequency));
- for loop=1:numel(frequency)
- FRF(loop,1)=H{loop,1}(indicei,indicej);
- end</p><p>figure
- subplot(2,1,1)
- plot(frequency,abs(FRF),'r')
- subplot(2,1,2)
- plot(frequency,angle(FRF),'k')
- </p>
复制代码
|
|