My problem is that I have a matrix A
and the computer says is not Hermitian (self-adjoint). Then I check which elements make A
be not Hermitian by calculating:
B=A-ConjugateTranspose[A]
In case A
is Hermitian, this difference should be zero. What I get is that A
is not Hermitian, but the terms I get in matrix B
all are smaller than 10^(-15)
.
So how can I fix it at the beggining of the code, Mathematica to consider two numbers equal, up to 10^(-10)
precision for example, that is it to consider:
0.00000000010 = 0.00000000012
or saying it in an alternative way, I want Mathematica to consider the following matrix Hermitian:
C={{0,I*1.1^(-10)},{-I*1.2^(-10),0}}
throughout the whole code.
Answer
You can check to see if the difference is less than the desired amount, and if so, to force it to be symmetric:
c = {{0, I 1.1*10^(-10)}, {-I 1.2*10^(-10), 0}};
cOut = If[Abs[Total[c - ConjugateTranspose[c], 2]] < 10^(-10),
1/2 (c + ConjugateTranspose[c]),c]
This returns cOut
which is a symmetrized version of c
if c
is close to Hermetian and returns c
otherwise (i..e, if it really isn't Hermetian).
Comments
Post a Comment