wangli20060913 发表于 2006-11-9 09:09

求解固有频率问题

请教:
      我在运用matlab求解系统自由振动固有频率时,遇到以下问题,不知是何原因,敬请高手指点:
      对于微分方程:Jx''+Kx=0
      用matlab命令eig(inv(J)*K)求得振型c1,c2,c3...和固有频率w1,w2,w3,...;
      理论上验算e1=det(K-J*(w1)^2),e2=det(K-J*(w2)^2),...,结果应该是e1=e2=e3=...=0
      但是我返回验算后,结果是e1,e2,e3,..都不是零,求解错在什么地方呢?敬请高手指点,谢谢!!

linqus 发表于 2006-11-9 10:07

请给出具体的算例,
让大家一起看看,谢谢。

猜测:

eig(inv(J)*K)求得振型c1,c2,c3...和特征值w1,w2,w3,...;

eig求出来的特征值是omiga^2,(omiga位固有频率)

试试det(K-J*(w1))看看。

探讨。

21172485 发表于 2007-3-3 15:17

结果是正确的

不是零就对了.
随着你的矩阵K-J*(w1)^2)阶数的增加,该行列式值变化非常剧烈.穿过零点只是在小数点很多位以后.
比如你用EIG命令取得的固有频率为小数点后三位,继续增加到后8-9位,经过精确的逼近以后才有可能将行列式值逼近到1以下.这样就逐渐趋近于零了

assist 发表于 2007-3-7 10:56

这个指示计算精度的问题,除非你计算出来的特征值和特征向量都是精度数,如整数之类的。!

loofwolf 发表于 2007-3-16 01:28

请教21172485和assist:

这也许是一个类似的问题:

我刚算了一个悬臂梁的FRF(前10阶),无阻尼的FRF和有部分/全部阻尼材料覆盖的的FRF对比。其中的关键就是求出系统的固有频率(复数值)和振型 模态。在求系统的固有频率(n个,先求belta_n*L, 在用 belta_n=omega_n*sqrt(density*Area/EI))时,其实就是求函数的根(n个), 不过这个函数是用行列式表示而已。 我发现一个问题,我是用“把假设的根带入行列式",如果他是一个根的话,又足够精确(到小数点后12位), 行列式的值应该为0。对前1~2阶求解,确实如此, 但对高阶,我明明知道这个解就是对的,也很精确(到小数点后12位)(对比书上的结果),把他带入行列式,结果不是0!而是很大的值(complex number)!!而且这个误差基本来源与虚部。如果是无阻尼处理的梁,系统的固有频率值应该为实数,虚部应该为0,计算出来的行列式值是复数 (我设的模态振型表达为exp(belta*t),但实部为0而虚部很大(对高阶)!,这是为什么那?也是精度问题吗?

21172485 发表于 2007-3-16 20:28

对,还是精度问题.但是既然你用的是复模态,那么还是把实部分离出去的好,因为固有频率是特征值的虚部
这样只要虚部构成的行列式值为零就可以,不用同时算实部和虚部
我算过的经验是,固有频率每提高一阶,小数点至少要后移动2-3位
所以12位是不够的,但是最后肯定会算到非常接近零

[ 本帖最后由 21172485 于 2007-3-16 20:30 编辑 ]

zhuofeng 发表于 2007-3-21 12:37

的确,eig(inv(J)*K)求出来的特征值是w^2
固你在验算的时候,代入的应该是w1,w2,w3,而不是它们的平方
页: [1]
查看完整版本: 求解固有频率问题