声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3868|回复: 8

[编程技巧] matlab求广义特征值问题

[复制链接]
发表于 2010-11-8 10:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求解(p.*A+B)*x=0的特征值和特征向量,下面是我的程序,可是算出来的特征向量总是有问题,请各位帮我找下问题,多谢各位大虾
A=[0 0 2 0;0 0 0 2;2 0 4 -1;0 2 -1 5]
B=[-2 0 0 0;0 -2 0 0;0 0 6000 -2000;0 0 -2000 6000]
C=B*inv(A)
[v,d]=eigs(-C)
这是第一个程序,后来算出来的特征向量有问题,验证的时候带进去算出来的值不是零,所以我换了个方法是这个
A=[0 0 2 0;0 0 0 2;2 0 4 -1;0 2 -1 5]
B=[-2 0 0 0;0 -2 0 0;0 0 6000 -2000;0 0 -2000 6000]
[V,D]=eig(B,-A)
可是算出来的还是和书上的结果不太一致。。。
回复
分享到:

使用道具 举报

发表于 2010-11-8 14:18 | 显示全部楼层
本帖最后由 Happy99 于 2010-11-8 14:22 编辑


什麼问题?
记住数值计算要完全等於零, 是不可能的!
只要误差比率可以就好了:@)
 楼主| 发表于 2010-11-8 16:19 | 显示全部楼层
Happy99 发表于 2010-11-8 14:18
什麼问题?
记住数值计算要完全等於零, 是不可能的!
只要误差比率可以就好了

其实是导师让我针对书上的一个例题编程,计算一般粘性阻尼系统的系统极点和特征向量,最后通过我写的这个方程获得,我算出来的极点是对的,和例题上一样,可是极点对应的特征向量却和书上的不一样,差的有点多,我换了几个函数算都不一样,可是我觉得我的算法应该是没有什么错误的,不知道问题出在哪里
发表于 2010-11-8 23:25 | 显示全部楼层
本帖最后由 Happy99 于 2010-11-8 23:26 编辑
xjyhuijia 发表于 2010-11-8 16:19
...算出来的极点是对的,和例题上一样,可是极点对应的特征向量却和书上的不一样,差的有点多 ...
差的有点多? 方便列出来看看吗!?
理论上极点(特征值)对了, 特征向量不应该不对!
发表于 2010-11-8 23:35 | 显示全部楼层
回复 3 # xjyhuijia 的帖子

我对你的两个矩阵有点疑惑,因为如果是有阻尼系统,正常的特征值应该是det(Ms^2+Cs+K)=0,即使写成状态空间det(A-sI)=0,A 也应该是[0 I;-inv(M)*K -inv(M)*C],即A第一行第三个数和第二行第四个数应该是1啊。我有点不明白了
 楼主| 发表于 2010-11-9 08:32 | 显示全部楼层
Happy99 发表于 2010-11-8 23:25
差的有点多? 方便列出来看看吗!?
理论上极点(特征值)对了, 特征向量不应该不对!

A=[0 0 2 0;0 0 0 2;2 0 4 -1;0 2 -1 5]
B=[-2 0 0 0;0 -2 0 0;0 0 6000 -2000;0 0 -2000 6000]
C=B*inv(A)
[v,d]=eigs(-C)
结果是下面这个,特征值和书上的答案一样,可是特征向量不一样
C =

  1.0e+003 *

    0.0020   -0.0005   -0.0010         0
   -0.0005    0.0025         0   -0.0010
    3.0000   -1.0000         0         0
   -1.0000    3.0000         0         0


v =

  -0.0001 - 0.0112i  -0.0001 + 0.0112i   0.0002 + 0.0158i   0.0002 - 0.0158i
   0.0003 + 0.0112i   0.0003 - 0.0112i   0.0000 + 0.0158i   0.0000 - 0.0158i
  -0.7070 - 0.0056i  -0.7070 + 0.0056i   0.7070             0.7070         
   0.7070             0.7070             0.7067 + 0.0158i   0.7067 - 0.0158i


d =

  -1.3750 -63.2296i        0                  0                  0         
        0            -1.3750 +63.2296i        0                  0         
        0                  0            -0.8750 -44.7135i        0         
        0                  0                  0            -0.8750 +44.7135i
书上给出了p1= -0.8750 +44.7135i和P2=-1.3750 +63.2296i的特征向量,分别是
y1=[4.0321*10^(-3)+7.0693*10^(-1)*i;1.1937*10^(-2)+7.0682*10^(-1)*i;1.5802*10^(-2)-3.9942*10^(-4)*i;1.5769*10^(-2)-5.7609*10^(-4)*i]
y2=[-9.1825*10^(-2)+7.0097*10^(-1)*i;1.0291*10^(-1)+6.9954*10^(-1)*i;1.1112*10^(-2)+1.2106*10^(-3)*i;-1.1094*10^(-2)-1.3864*10^(-3)*i]
 楼主| 发表于 2010-11-9 08:41 | 显示全部楼层
appleseed05 发表于 2010-11-8 23:35
回复 3 # xjyhuijia 的帖子

我对你的两个矩阵有点疑惑,因为如果是有阻尼系统,正常的特征值应该是det(Ms^ ...

这是一个二自由度系统,质量、刚度、阻尼矩阵分别是
M=[2 0;0 2]
C=[4 -1;-1 5]
K=[6000 -2000;-2000 6000]
书上推导是[Z(p)]{X(p)}=(p^2.*M+p.*C+K)*{X(p)}={F(p)},然后为了将其转化为一般特征值问题。引入方程,(p.*M-p.*M){X(p)}={0}
最后得到:(p.*A+B)*{Y}={F'}
A=[[0] M;M C],B=[-M [0];[0] K],{Y}={p.*{X};{X}},{F'}={{0};{F}}
所以就变成了det(p.*A+B)=0
这就是整个推导过程
 楼主| 发表于 2010-11-9 08:42 | 显示全部楼层
Happy99 发表于 2010-11-8 23:25
差的有点多? 方便列出来看看吗!?
理论上极点(特征值)对了, 特征向量不应该不对!

这是一个二自由度系统,质量、刚度、阻尼矩阵分别是
M=[2 0;0 2]
C=[4 -1;-1 5]
K=[6000 -2000;-2000 6000]
书上推导是[Z(p)]{X(p)}=(p^2.*M+p.*C+K)*{X(p)}={F(p)},然后为了将其转化为一般特征值问题。引入方程,(p.*M-p.*M){X(p)}={0}
最后得到:(p.*A+B)*{Y}={F'}
A=[[0] M;M C],B=[-M [0];[0] K],{Y}={p.*{X};{X}},{F'}={{0};{F}}
所以就变成了det(p.*A+B)=0
这就是整个推导过程
发表于 2010-11-9 13:56 | 显示全部楼层
理论上极点(特征值)对了, 特征向量不应该不对!
个人以为是一样的, LZ比较下
abs(v)
[abs(y1) abs(y2)]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 08:18 , Processed in 0.076431 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表