Finding the orthogonal diagonalizing similarity of a symmetric matrix
Clash Royale CLAN TAG#URR8PPP
up vote
2
down vote
favorite
I'm aware that there are some questions similar to this here, but none that could solve my problem.
So, I have to diagonalize a symmetric symbolic matrix $m$ (to be seen below) and obtain the orthogonal transformation $P$ such that $P^TmP=D$ where $D$ is diagonal. Here is the last thing I have tried:
m = a*x^2, c*x*y, c*x*y, b*y^2;
vals, vecs = Simplify[Eigensystem[m], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
vecs = Simplify[Normalize /@ vecs, Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
FullSimplify[vecs.vecs[Transpose] == IdentityMatrix[2], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals]
Where the last line does not return True
, but rather a matrix, in the LHS, with elements different from unit in the diagonal (but, correctly, with $0$ in the off-diagonal).
Now, if it is not clear enough, I'm really new to Mathematica and would immensely appreciate any tips such as where it would be sufficient for me to include the Assumptions and to Simplify at all in a case like this (I would say that the very last FullSimplify, with the Assumptions, would be enough, but am not sure). Besides that, my problem is that the matrix $P$, or vecs[Transpose]
, is not orthogonal, which because of stated facts obviously results from the fact that the eigenvectors are not normalized in the proper sense.
I have the feeling that the problem comes from some imaginary numbers not taken care of by the assumptions, but cannot quite pin it down exactly.
Now, the solution suggested in this question works perfectly and I can understand why it works, but cannot understand why the Normalize, as I used, isn't and if there isn't a less artisanal way (than the one of the link above) of solving the problem.
matrix linear-algebra vector eigenvalues
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |Â
up vote
2
down vote
favorite
I'm aware that there are some questions similar to this here, but none that could solve my problem.
So, I have to diagonalize a symmetric symbolic matrix $m$ (to be seen below) and obtain the orthogonal transformation $P$ such that $P^TmP=D$ where $D$ is diagonal. Here is the last thing I have tried:
m = a*x^2, c*x*y, c*x*y, b*y^2;
vals, vecs = Simplify[Eigensystem[m], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
vecs = Simplify[Normalize /@ vecs, Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
FullSimplify[vecs.vecs[Transpose] == IdentityMatrix[2], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals]
Where the last line does not return True
, but rather a matrix, in the LHS, with elements different from unit in the diagonal (but, correctly, with $0$ in the off-diagonal).
Now, if it is not clear enough, I'm really new to Mathematica and would immensely appreciate any tips such as where it would be sufficient for me to include the Assumptions and to Simplify at all in a case like this (I would say that the very last FullSimplify, with the Assumptions, would be enough, but am not sure). Besides that, my problem is that the matrix $P$, or vecs[Transpose]
, is not orthogonal, which because of stated facts obviously results from the fact that the eigenvectors are not normalized in the proper sense.
I have the feeling that the problem comes from some imaginary numbers not taken care of by the assumptions, but cannot quite pin it down exactly.
Now, the solution suggested in this question works perfectly and I can understand why it works, but cannot understand why the Normalize, as I used, isn't and if there isn't a less artisanal way (than the one of the link above) of solving the problem.
matrix linear-algebra vector eigenvalues
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |Â
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I'm aware that there are some questions similar to this here, but none that could solve my problem.
So, I have to diagonalize a symmetric symbolic matrix $m$ (to be seen below) and obtain the orthogonal transformation $P$ such that $P^TmP=D$ where $D$ is diagonal. Here is the last thing I have tried:
m = a*x^2, c*x*y, c*x*y, b*y^2;
vals, vecs = Simplify[Eigensystem[m], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
vecs = Simplify[Normalize /@ vecs, Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
FullSimplify[vecs.vecs[Transpose] == IdentityMatrix[2], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals]
Where the last line does not return True
, but rather a matrix, in the LHS, with elements different from unit in the diagonal (but, correctly, with $0$ in the off-diagonal).
Now, if it is not clear enough, I'm really new to Mathematica and would immensely appreciate any tips such as where it would be sufficient for me to include the Assumptions and to Simplify at all in a case like this (I would say that the very last FullSimplify, with the Assumptions, would be enough, but am not sure). Besides that, my problem is that the matrix $P$, or vecs[Transpose]
, is not orthogonal, which because of stated facts obviously results from the fact that the eigenvectors are not normalized in the proper sense.
I have the feeling that the problem comes from some imaginary numbers not taken care of by the assumptions, but cannot quite pin it down exactly.
Now, the solution suggested in this question works perfectly and I can understand why it works, but cannot understand why the Normalize, as I used, isn't and if there isn't a less artisanal way (than the one of the link above) of solving the problem.
matrix linear-algebra vector eigenvalues
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I'm aware that there are some questions similar to this here, but none that could solve my problem.
So, I have to diagonalize a symmetric symbolic matrix $m$ (to be seen below) and obtain the orthogonal transformation $P$ such that $P^TmP=D$ where $D$ is diagonal. Here is the last thing I have tried:
m = a*x^2, c*x*y, c*x*y, b*y^2;
vals, vecs = Simplify[Eigensystem[m], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
vecs = Simplify[Normalize /@ vecs, Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals];
FullSimplify[vecs.vecs[Transpose] == IdentityMatrix[2], Assumptions -> a > 0 && b > 0 && c > 0 && x [Element] Reals && y [Element] Reals]
Where the last line does not return True
, but rather a matrix, in the LHS, with elements different from unit in the diagonal (but, correctly, with $0$ in the off-diagonal).
Now, if it is not clear enough, I'm really new to Mathematica and would immensely appreciate any tips such as where it would be sufficient for me to include the Assumptions and to Simplify at all in a case like this (I would say that the very last FullSimplify, with the Assumptions, would be enough, but am not sure). Besides that, my problem is that the matrix $P$, or vecs[Transpose]
, is not orthogonal, which because of stated facts obviously results from the fact that the eigenvectors are not normalized in the proper sense.
I have the feeling that the problem comes from some imaginary numbers not taken care of by the assumptions, but cannot quite pin it down exactly.
Now, the solution suggested in this question works perfectly and I can understand why it works, but cannot understand why the Normalize, as I used, isn't and if there isn't a less artisanal way (than the one of the link above) of solving the problem.
matrix linear-algebra vector eigenvalues
matrix linear-algebra vector eigenvalues
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 3 hours ago
GaloisFan
112
112
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
GaloisFan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
3
down vote
This helps:
assumptions = a > 0 && b > 0 && c > 0 && x ∈ Reals && y ∈ Reals;
Simplify[vecs.vecs[Transpose] /. Abs -> RealAbs, assumptions]]
1, 0, 0, 1
helps. That's a typical issue when using symbolic compuations involving Norm
and Normalize
: Mathematica treats all variables as complex numbers. Thus, Abs[z]^2
does not equal z^2
which often prevents the crucial simplification step. Recently, RealAbs
was added to the language and it allows this simplification:
RealAbs[z]^2 // Simplify
z^2
Yet, it is somewhat mysterious to me that your approach did not work, because your assumptions
imply that all variables are real numbers...
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
This helps:
assumptions = a > 0 && b > 0 && c > 0 && x ∈ Reals && y ∈ Reals;
Simplify[vecs.vecs[Transpose] /. Abs -> RealAbs, assumptions]]
1, 0, 0, 1
helps. That's a typical issue when using symbolic compuations involving Norm
and Normalize
: Mathematica treats all variables as complex numbers. Thus, Abs[z]^2
does not equal z^2
which often prevents the crucial simplification step. Recently, RealAbs
was added to the language and it allows this simplification:
RealAbs[z]^2 // Simplify
z^2
Yet, it is somewhat mysterious to me that your approach did not work, because your assumptions
imply that all variables are real numbers...
add a comment |Â
up vote
3
down vote
This helps:
assumptions = a > 0 && b > 0 && c > 0 && x ∈ Reals && y ∈ Reals;
Simplify[vecs.vecs[Transpose] /. Abs -> RealAbs, assumptions]]
1, 0, 0, 1
helps. That's a typical issue when using symbolic compuations involving Norm
and Normalize
: Mathematica treats all variables as complex numbers. Thus, Abs[z]^2
does not equal z^2
which often prevents the crucial simplification step. Recently, RealAbs
was added to the language and it allows this simplification:
RealAbs[z]^2 // Simplify
z^2
Yet, it is somewhat mysterious to me that your approach did not work, because your assumptions
imply that all variables are real numbers...
add a comment |Â
up vote
3
down vote
up vote
3
down vote
This helps:
assumptions = a > 0 && b > 0 && c > 0 && x ∈ Reals && y ∈ Reals;
Simplify[vecs.vecs[Transpose] /. Abs -> RealAbs, assumptions]]
1, 0, 0, 1
helps. That's a typical issue when using symbolic compuations involving Norm
and Normalize
: Mathematica treats all variables as complex numbers. Thus, Abs[z]^2
does not equal z^2
which often prevents the crucial simplification step. Recently, RealAbs
was added to the language and it allows this simplification:
RealAbs[z]^2 // Simplify
z^2
Yet, it is somewhat mysterious to me that your approach did not work, because your assumptions
imply that all variables are real numbers...
This helps:
assumptions = a > 0 && b > 0 && c > 0 && x ∈ Reals && y ∈ Reals;
Simplify[vecs.vecs[Transpose] /. Abs -> RealAbs, assumptions]]
1, 0, 0, 1
helps. That's a typical issue when using symbolic compuations involving Norm
and Normalize
: Mathematica treats all variables as complex numbers. Thus, Abs[z]^2
does not equal z^2
which often prevents the crucial simplification step. Recently, RealAbs
was added to the language and it allows this simplification:
RealAbs[z]^2 // Simplify
z^2
Yet, it is somewhat mysterious to me that your approach did not work, because your assumptions
imply that all variables are real numbers...
answered 2 hours ago


Henrik Schumacher
38k249108
38k249108
add a comment |Â
add a comment |Â
GaloisFan is a new contributor. Be nice, and check out our Code of Conduct.
GaloisFan is a new contributor. Be nice, and check out our Code of Conduct.
GaloisFan is a new contributor. Be nice, and check out our Code of Conduct.
GaloisFan is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f181978%2ffinding-the-orthogonal-diagonalizing-similarity-of-a-symmetric-matrix%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password