Principal stress values and directions using .eigs
20 views (last 30 days)
Show older comments
Hi all, I am using eigs to find principal stress values and their directions from the stress matrix which looks as follow: S=[element_stress(1) element_stress(3) 0; element_stress(3) element_stress(2) 0; 0 0 0]; Depending upon the sign of the matrix components the eigen vector should point in different directions. but when S(1,1) is positive or negative and the rest of the matrix is zero, I get the same eigen vector.When I plot the eigen values of the above matrix along the components of eigen vectors using quiver command, they point to the same direction whether S(1,1) is positive or negative.
0 Comments
Answers (2)
Andrew Newell
on 17 Jul 2011
You speak of the eigenvector as if there is only one for your system. Aren't you getting three? Since all your nonzero stresses are in the XY plane, one of your eigenvectors is always [0; 0; 1]. The other two should vary. Here is an example:
M2 = eye(3); M2(1:2,1:2) = [1 2; 3 4];
[V, D] = eigs(M2)
V =
-0.4160 0 -0.8246
-0.9094 0 0.5658
0 1.0000 0
D =
5.3723 0 0
0 1.0000 0
0 0 -0.3723
Walter Roberson
on 17 Jul 2011
Is there a particular reason you are using eigs() on a small full vector? That is the opposite of the condition that eigs() is recommended for.
With a test matrix,
k = zeros(3,3);
k(1,1)=5;
[v,d] = eigs(k)
k(1,1)=-5;
[v,d] = eigs(k)
I do get the same eigenvector for the two cases. If I use eig() instead of eigs() then both cases return the same first column but the second and third columns are exchanged. The second and third columns correspond to the twin eigenvalues of 0, and since there is no inherent sorting order between equal values, neither order can be said to be more correct. eig() does not return a different first column (corresponding to the first eigenvalue) for the two cases, which suggests to me that your assertion about the sign of the vectors is incorrect.
2 Comments
Walter Roberson
on 17 Jul 2011
True you did not say anything about eig(), but if eig() and eigs() both give the same eigenvectors (up to ordering0, then either _you_ are wrong about what the eigenvectors must be, or else MATLAB's fundamental eigenvalue and eigenvector tool, eig(), would have to be wrong in a way that surely would have been noticed before.
Your requirement that the stress changes direction is equivalent to a requirement that the eigenvalues are non-negative. There is no such mathematical requirement. See the description at http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors .
I would suggest that instead of fighting with eigs() to get it to do something that it was never mathematically designed to do, that you test the sign of the eigenvalues and for the values less than 0, you negate the eigenvalue and each component of the corresponding eigenvector.
See Also
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!