请问关于特征系统实现算法
我在模态分析使用特征系统实现算法时,得到的特征值是实际的2倍,我百思不得其解,这是怎么回事?
请高手不惜指教
[ 本帖最后由 xinyuxf 于 2007-5-16 09:16 编辑 ]
回复:(wwhbluesun)请问关于特征系统实现算法
请把问题说清楚,比如你用的什么软件算的,模型什么样的等等 本帖最后由 VibInfo 于 2016-4-22 15:03 编辑算法是你自己编的吗?
我自己编过环境激励下的特征系统实现算法。平时精度很高,抗噪能力极其差。
通常情况下,频率的精度很高,大概会在百分之零点几。阻尼精度20%以内
但20%噪声情况下,频率也许能保持5%以内,但阻尼就很离谱了。
频率除以2后的精度很好,振型未看
是的我自己编用Matlab,一五自由度系统
这有关系吗?请高手不惜指教
回复:(aspen)回复:(wwhbluesun)请问关于特征系统...
本帖最后由 VibInfo 于 2016-4-22 15:03 编辑希望你能帮帮我
function = ERA(h,Ni,pr,pc,Fs)
% h 脉冲响应函数(由连续系统仿真得到) , Ni 激励点数
% h 排列方式:
% |1,...,No|1,...,No| ... |1,...,No|
% 1, 2, ... Ni
%
% pr 行数(\alpha); pc列数(\beta); Fs 采样频率
= size(h);
No = col/Ni;
H0 = zeros(No*pr,Ni*pc); H1 = H0;
for kc = 1 : pc
for kr = 1:pr
H0( (kr-1)*No+1 : kr*No ,(kc-1)*Ni+1 : kc*Ni ) = reshape( h(kr+kc-1,:),No,Ni );
H1( (kr-1)*No+1 : kr*No ,(kc-1)*Ni+1 : kc*Ni ) = reshape( h(kr+kc+1,:),No,Ni );
end
end
= svd(H0,0);
dS = diag(S); r = find(dS > 1e-10); dS = dS(r);
% = size(S); ldS = length(dS);
%Ss = ;
Ss = diag(dS.^(-0.5));
U = U(:,r); V = V(:,r);
A1 = Ss * U' * H1 * V * Ss;
= eig(A1,'nobalance');
D = diag(D);
Lam = log(D) * Fs ; % /2 ?????
本帖最后由 VibInfo 于 2016-4-22 15:04 编辑
你的代码是前边错了,可能是H0,H1 求错了。
我把下边的代码加入我的程序:
= svd(H0,0);
dS = diag(S); r = find(dS > 1e-10); dS = dS(r);
% = size(S); ldS = length(dS);
%Ss = ;
Ss = diag(dS.^(-0.5));
U = U(:,r); V = V(:,r);
A1 = Ss * U' * H1 * V * Ss;
= eig(A1,'nobalance');
D = diag(D);
Lam = log(D) *Fs
w=abs(Lam)/2/pi(这一行是本人加的)
得到的角频率值没错,不存在2倍关系
证明你的错误发生在前边
回复:(lxinghan)你的代码是前边错了,可能是H0,...
本帖最后由 VibInfo 于 2016-4-22 15:04 编辑我写的H0,H1是按书本上的,我知道Matlab有
一个函数就是生成Hankle矩阵,我倒没有仔细
研究,我再试试吧!
ERA我的一点体会
现成的hankel 矩阵用在元素为数上还容易,我也好久没能直接用成。最后不得不用高维数组构造的,不过效果不好。
学姐,学长哪天悟明白啦,一定指导下小弟啊。
ERA中出现了许多虚假模态
我自编的ERA中出现了许多虚假模态,搞不懂怎么剔除啊。学长们救小弟 :handshake 首先你要确定系统矩阵的阶次是多少?那样就不会有虚假模态了 出现虚假模态很可能是系统定阶过大造成的,可以用稳定图确定系统阶次 对于有阻尼的N个自由度系统求特征值会得到2N个特征值,他们是互为共轭的特征值,实际得到得特征值是除去负的特征值。
页:
[1]