📄 sea_cond.m
字号:
% SEA-COND方法(SEA为 Sensor Elimination Algorithm, 即传感器淘汰算法,COND为条件数, Condition number):
% 直接计算模态矩阵 A 的条件数(Condition number), cond(A)
% 模态矩阵 A 相当于是由候选传感器“测量”的模态矩阵。
% 当前要淘汰的传感器(自由度)是按下列方式确定的:
% 轮流删除每个传感器,即模态矩阵 A 中的每一行,然后,计算模态矩阵 A 的条件数 cond(A),
% 哪一种删除所产生的条件数cond(A)值最小,那么,相应的传感器就是本轮要淘汰的对象。
clear;
%============================ can be updated by user===================================================================
modal=[0.0157 0.0302 -0.0422 -0.0506 0.0545 0.0532 -0.0463 0.0343 0.0183
0.0299 0.0488 -0.0496 -0.0313 -0.0000 -0.0329 0.0545 -0.0556 -0.0348
0.0411 0.0488 -0.0161 0.0313 -0.0545 -0.0329 -0.0177 0.0556 0.0479
0.0483 0.0302 0.0306 0.0506 0.0000 0.0532 -0.0337 -0.0343 -0.0563
0.0508 -0.0000 0.0521 -0.0000 0.0545 0.0000 0.0573 0.0000 0.0592
0.0483 -0.0302 0.0306 -0.0506 0.0000 -0.0532 -0.0337 0.0343 -0.0563
0.0411 -0.0488 -0.0161 -0.0313 -0.0545 0.0329 -0.0177 -0.0556 0.0479
0.0299 -0.0488 -0.0496 0.0313 -0.0000 0.0329 0.0545 0.0556 -0.0348
0.0157 -0.0302 -0.0422 0.0506 0.0545 -0.0532 -0.0463 -0.0343 0.0183];
%Modal Matrix中振型向量按列放置,不要求一定是方阵
n=9; %n-measured DOF,
m1=2;m2=2; %m1,m2-modal order numbers between which the mode shapes are concerned, set by user
%===================================================================================================================
m=m2-m1+1; %m-number of concerned modes
a(1:n,1:m)=modal(1:n,m1:m2);
nj=n;
priority(1:n)=0;
for j=1:1:n %轮次
for i=1:1:nj %轮流删除每个自由度,同时计算每种删除所产生的行列式的值.删掉第i自由度的方式是将第i行从a中挤出,新矩阵记为ai
for k=1:1:i-1
ai(k,1:m)=a(k,1:m); %i行以前不变
end
for k=i:1:nj-1 %i行以后均提前一行
ai(k,1:m)=a(k+1,1:m);
end
d(i)=cond(ai,2); %计算模态矩阵 Ai 的条件数
end
d %本轮完成后,显示各淘汰方式的条件数的值
%找出本轮中各条件数的最小值,然后记下其对应的自由度号
dmin=1e100;imin=0;
for i=1:1:nj
if d(i)<dmin
dmin=d(i);
imin=i;
end
end
%将本轮结果填入设置传感器的优先级向量priority
k=0;
for i=1:1:n
if priority(i)==0
k=k+1;
if k==imin
priority(i)=j/n; %第i个自由度在第j轮被淘汰,于是其被设置传感器的优先级被定义为j/n,此值越大,优先布置传感器的级别越高
dele(j)=i; %本轮删除第i个自由度,dele 仅为用于数字显示淘汰顺序,可以不要此行
end
end
end
%根据上述最小值,确定下一轮的模态矩阵
for k=1:1:imin-1
aj(k,1:m)=a(k,1:m);
end
for k=imin:1:nj-1
aj(k,1:m)=a(k+1,1:m);
end
a=aj;
nj=nj-1;
end
figure(1)
bar(priority(1:n))%传感器的优先级
grid on
xlabel('No. of DOF','fontname','times new roman','fontsize',10,'fontweight','bold');
ylabel('Priority of Instrumentation','fontname','times new roman','fontsize',10,'fontweight','bold');
colormap([1 0 0]);
dele%数字显示淘汰顺序
figure(2)%淘汰顺序
DeleMatrix(1:n,1:n)=1;%
for i=2:1:n
for j=1:1:i-1
DeleMatrix(i,dele(j))=0;
end
end
bar3(DeleMatrix);
DeleMatrix
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -