How to define an ellipse by the eigendecomposition of its transformation matrix?

26 vues (au cours des 30 derniers jours)
I'm trying to establish the correct setup for defining an ellipse as a 'stretch' of a circle and a rotation of the result. For simplicity assume the centres of the circle and therefore the ellipse to be so that the equation of the ellipse is
Now let the eigenvalues of be and so that the 'stretch' matrix is
and let the rotation, counter-clockwise, of an angle θ from the x-axis be achieved by the transformation
.
Since , is an admissible matrix of eigenvectors and it should be possible to express as the product of its eigendecomposition by
.
However, when I perform the reverse operation in practice, clearly something in the above is not correct, but I'm not sure what it is. The code snippet below illustrates the issue for and , . What is it I'm getting wrong?
>> theta = pi/4
theta =
0.7854
>> R = [cos(theta) sin(theta); -sin(theta) cos(theta)]
R =
0.70711 0.70711
-0.70711 0.70711
>> S = [1 0; 0 4]
S =
1 0
0 4
>> A = R*S*R'
A =
2.5 1.5
1.5 2.5
>> [V,D] = eig(A)
V =
-0.70711 0.70711
0.70711 0.70711
D =
1 0
0 4
>> V*D*V'-A
ans =
-4.4409e-16 -4.4409e-16
-4.4409e-16 -4.4409e-16
>>
  8 commentaires
William Rose
William Rose le 21 Sep 2022
@RickyBoy, that is a very nice compact and elegant bit of code from @Torsten.
In case you are still wondering about the sign in the rotation matrix, in which you had
R1=[cos(t), sin(t); -sin(t), cos(t)]
and @Torsten had
R2=[cos(t), -sin(t); sin(t), cos(t)]
The difference is that
y1=R1*x is equivalent to rotating the axes CCW by angle t. y1 is x, expressed in terms of the rotated axes.
y2=R2*x is equivalent to rotating the points CCW by angle t. y2 is the rotated x. The axes are unaltered.
By the way, when viewing plots of ellipses, you may want to use axis equal so that the aspect ratio is correctly represented.
RickyBoy
RickyBoy le 21 Sep 2022
Thank you, appreciate your comments.

Connectez-vous pour commenter.

Réponse acceptée

Torsten
Torsten le 21 Sep 2022
Déplacé(e) : Walter Roberson le 21 Sep 2022
phi = linspace(0,2*pi,100);
S = [1 0;0 4];
xy = S*[cos(phi);sin(phi)];
theta = pi/4;
Sxy = [cos(theta) -sin(theta);sin(theta) cos(theta)]*xy;
hold on
plot(xy(1,:),xy(2,:))
plot(Sxy(1,:),Sxy(2,:))
hold off
  1 commentaire
RickyBoy
RickyBoy le 21 Sep 2022
Déplacé(e) : Walter Roberson le 21 Sep 2022
Thank you, most helpful! I can't mark this as an accepted answer because it was submitted as a comment but if you submit it as an answer I will mark it as the accepted one. In any case, I appreciate your engagement.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by