Why am I getting wrong eigenvectors using eig().
52 ビュー (過去 30 日間)
古いコメントを表示
My application is the common one of multimodal vibration: set up a mass M and stiffness K matrix using convenient generalised coordinates, then get the eigenvalues and eigenvectors of K*M^-1.
This works fine normally, but it gives me wrong eigenvectors when used on the standard example of a massive block (usually a car body) mounted on two springs and using the simplest generalised coordinates: vertical displacement of the centre of mass and angle of rotation.
The matrices I've used are: M=[70 0;0 10] K=[300 40;40 22]*1000 Matlab gives correct eigenvalues:[5079 0;0 1406], but the wrong eigenvectors:[1 -1;0.1984 0.7199].
The correct eigenvectors are [0.1984 0.7199;-1 1], which I got using Mathematica and confirmed by using them to give me diagonal generalised mass and stiffness matrices, as they should.
You'll see that the Matlab eigenvectors, which form the modal matrix, have got the correct numbers in them, but they are mixed up, both in position and sign.
Can anybody suggest a reason, and better still a solution?
2 件のコメント
Matt Kindig
2012 年 10 月 12 日
Also keep in mind that [1 -1] and [-1 1] are the same eigenvector, since eigenvectors are only defined up to some scale factor. Multiplying all of the elements of an eigenvector by a scalar (such as -1) does not change the eigenvector.
採用された回答
Matt J
2012 年 10 月 12 日
編集済み: Matt J
2012 年 10 月 19 日
In any case, you can directly verify that MATLAB did not give you "wrong" eigenvectors. The eigenvector matrix, V, which MATLAB gave you, does satisfy the appropriate eigenvalue equations
>> M=[70 0;0 10]; K=[300 40;40 22]*1000;
>> [V,D]=eig(K*inv(M));
>> (K*inv(M))*V- V*D
ans =
1.0e-12 *
0 0.2274
-0.2274 0.1137
3 件のコメント
Heitor Camarini
2020 年 5 月 28 日
Hello Jack,
I am having that exact same problem now, almost 8 years late!! The eigenvectors I am getting from MATLAB do not mach the ones from my HP calculator. Have you been able to solve it? I am trying to calculate multimodal vibrations as well.
Thanks!
Matt J
2020 年 5 月 29 日
Jack said he solved the problem:
その他の回答 (1 件)
Huy Dinh
2018 年 5 月 19 日
Jack sorry I'm 6 years late with this answer lol. I've been having this problem also for the past 2 days and it drove me crazy. I finally found the reason! The eigenvalue problem you were doing is for the matrix
A1 = K*inv(M).
If you do the eigenvalue problem for
A2 = inv(M)*K
instead, you'll get what you wanted! Note that A1 is the transpose of A2, which, in 2D, happens to be the angle transformation using
T = [cos(90) sin(90)
sin(90) cos(90)]
where
A1 = A2 * T
For that reason, your eigenvalues are "rotated" 90°. I hope that makes sense
2 件のコメント
Syed Abdul Rafay
2024 年 2 月 16 日
clear all
clc
syms lambda
syms x
syms i
rhoEpoxy = 1200;
Em = 3e+09;
R=5;
E_L=70e+9;
E_r=200e+9;
rho_L=2702;
rho_r=5700;
nu=3;
A_K=zeros(R+1,R+1);
A_M=zeros(R+1,R+1);
G=zeros(R+1,R+1);
H1_K=zeros(R+1,R+1);
H1_M=zeros(R+1,R+1);
H2_M=zeros(R+1,R+1);
for ri=1:R+1
r = ri-1;
for mi=1:R+1
m = mi-1;
fun1 = @(ksei1) (ksei1.^(r+m)).*((1-(exp(nu*ksei1)-1)./(exp(nu)-1))+E_r/E_L*(exp(nu*ksei1)-1)./(exp(nu)-1));
%G(mi,ri)=integral(fun1,0,1);
fun_h1=@(ksei2,s2) (-2*nu/(exp(nu)-1)*(E_r/E_L-1)*exp(nu*s2)).*(s2.^r).*(ksei2.^m)+...
(nu^2/(exp(nu)-1)*(E_r/E_L-1)*exp(nu*s2)).*(s2.^r).*(ksei2.^(m+1))-...
(nu^2/(exp(nu)-1)*(E_r/E_L-1)*exp(nu*s2)).*(s2.^(r+1)).*(ksei2.^m);
fun_h1_lambda=@(ksei3,s3) (-1/6*((ksei3-s3).^3).*((1-(exp(nu*s3)-1)./(exp(nu)-1))+...
rho_r/rho_L*(exp(nu*s3)-1)./(exp(nu)-1))).*(s3.^r).*(ksei3.^m);
fun_h2_lambda=@(ksei4,s4) (1/6*(ksei4.^3).*((1-(exp(nu*s4)-1)./(exp(nu)-1))+...
rho_r/rho_L*(exp(nu*s4)-1)./(exp(nu)-1))-1/2*(ksei4.^2).*s4.*((1-(exp(nu*s4)-1)./(exp(nu)-1))+...
rho_r/rho_L*(exp(nu*s4)-1)./(exp(nu)-1))).*(s4.^r).*(ksei4.^m);
options = {'RelTol', 1e-22, 'AbsTol', 1e-24};
G(mi,ri) = integral(fun1, 0, 1, options{:});
H1_K(mi,ri) = integral2(fun_h1, 0, 1, 0, @(ksei2) ksei2, options{:});
H1_M(mi,ri) = integral2(fun_h1_lambda, 0, 1, 0, @(ksei3) ksei3, options{:});
H2_M(mi,ri) = integral2(fun_h2_lambda, 0, 1, 0, 1, options{:});
A_K(mi,ri)=G(mi,ri)+H1_K(mi,ri);
A_M(mi,ri)=H1_M(mi,ri)+H2_M(mi,ri);
end
end
sort(sqrt(eig(A_K,-A_M)))
% fplot(@(x) rho_L*(1-(exp(nu*x)-1)./(exp(nu)-1))+rho_r*(exp(nu*x)-1)./(exp(nu)-1), [0,1])
% xval = fzero(@(lambda2) det(A_K+lambda2*A_M),0);
% sqrt(xval)
Can you help me also. I have kind of same problem. My first three modes are correct but 4th and 5th mode of the frequency are wrong. There is a big difference
these are the correct values
2.854
21.496
63.679
126.60
As I increase R I start getting complex values don't know why
The equation is correct and even the code. I think there is a problem with eig function
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!