1 | initial version |
Hint: work over AA
or QQbar
.
Ideally, define the matrix over AA
or QQbar
from the start.
Or use AA
or QQbar
at the time of checking the equality.
sage: bool(AA(N) == -(1 - QQbar(M).abs()^2)^2)
2 | No.2 Revision |
Hint: work over AA
or QQbar
.
Ideally, define the matrix over compute in AA
or QQbar
(or in an appropriate
number field if you know which one to use) from the start.
Or start and avoid ending up with such complicated expressions.
Some ways to do this:
matrix(QQbar, ...)
instead of matrix(...)
r = AA(2).sqrt()
and use r
instead of sqrt(2)
Having defined M
and N
as in the question...
Define corresponding elements in QQbar
or AA
or QQbar
at the time of checking the equality.
sage: bool(AA(N) : sage: m = QQbar(M)
sage: n = AA(N)
sage: p = -(1-m.abs()^2)^2
Check their values:
sage: m
0.0154952449333661? - 0.772904461325769?*I
sage: n
-0.1619085305331?
sage: p
-0.1619085305331120?
So n
and p
might be equal...
Check their difference:
sage: d = p - n
sage: d
0.?e-13
Looks like it might be zero.
Checking it takes forever:
sage: d.is_zero() # takes forever
sage: AA(N)
== -(1 - QQbar(M).abs()^2)^2)
QQbar(M).abs()^2)^2 # takes forever
Regarding other software, Calcium might help. See
3 | No.3 Revision |
Hint: [Edited 2020-07-26 to turn vague hints into an actual answer].
Here is one way to go, with M
and N
as in the question.
Our solution uses algebraic numbers in AA
and QQbar
rather than symbolic expressions in Sage's "symbolic ring".
However we start by computing the square of the modulus of M
using the symbolic ring and string manipulations.
Along the way, two of the computations take a few seconds each, but under a minute (on a 2014 MacBook Air).
To define the conjugate of M
, we turn M
into a string,
then replace I
by (-I)
in that string, then convert
back to a symbolic expression:
sage: Mc_str = str(M).replace('I', '(-I)')
sage: Mc = SR(Mc_str)
Compute (abs(M)^2 - 1)^2
using M*Mc
for abs(M)^2
:
sage: W = (M*Mc - 1)^2
Our goal is to prove that N + W
is zero.
See N
as a real algebraic number:
sage: N_aa = AA(N)
-0.1619085305331?
See W
as an algebraic number (not known to be real yet):
sage: W_qqbar = QQbar(W)
sage: W_qqbar
0.1619085305331120? + 0.?e-16*I
Examine the imaginary part:
sage: W_imag = W_qqbar.imag()
sage: W_imag
0.?e-16
Check whether it is actually zero:
sage: W_imag.is_zero() # takes a few seconds
True
Since its imaginary part is zero, see W
as a real algebraic number:
sage: W_aa = AA(W_qqbar)
sage: W_aa
0.1619085305331121?
Compute the sum of W
and N
(we hope it is zero):
sage: Z_aa = W_aa + N_aa
Does it look like it might be zero:
sage: Z_aa
0.?e-13
Is it actually zero:
sage: Z_aa.is_zero() # takes a few seconds
True
Finally:
sage: Z_aa
0
The main take-away hint is to work over AA
or QQbar
.
Ideally, compute in AA
or QQbar
(or in an appropriate
number field if you know which one to use) from the start
and avoid ending up with such complicated expressions.
Some ways to do this:
matrix(QQbar, ...)
instead of matrix(...)
r = AA(2).sqrt()
and use r
instead of sqrt(2)
QQ
Having defined M
and N
as in the question...
Define corresponding elements in QQbar
or AA
:
sage: m = QQbar(M)
sage: n = AA(N)
sage: p = -(1-m.abs()^2)^2
Check their values:
sage: m
0.0154952449333661? - 0.772904461325769?*I
sage: n
-0.1619085305331?
sage: p
-0.1619085305331120?
So n
and p
might be equal...
Check their difference:
sage: d = p - n
sage: d
0.?e-13
Looks like it might be zero.
Checking it takes forever:
sage: d.is_zero() # takes forever
sage: AA(N) == -(1 - QQbar(M).abs()^2)^2 # takes forever
Regarding other software, Calcium might help. See
My initial approach was somewhat along the same lines but did not quite get us there. I stopped the final computations after several minutes or intense cpu usage.
I still leave it here for comparison.
Having defined M
and N
as in the question...
Define corresponding elements in QQbar
or AA
:
sage: m = QQbar(M)
sage: n = AA(N)
sage: p = -(1-m.abs()^2)^2
Check their values:
sage: m
0.0154952449333661? - 0.772904461325769?*I
sage: n
-0.1619085305331?
sage: p
-0.1619085305331120?
So n
and p
might be equal...
Check their difference:
sage: d = p - n
sage: d
0.?e-13
Looks like it might be zero.
Checking it seems to take forever:
sage: d.is_zero() # takes too long
sage: AA(N) == -(1 - QQbar(M).abs()^2)^2 # takes too long
4 | No.4 Revision |
[Edited 2020-07-26 to turn vague hints into an actual answer].
Here is one way to go, with M
and N
as in the question.
Our solution uses algebraic numbers in AA
and QQbar
rather than symbolic expressions in Sage's "symbolic ring".
However we start by computing the square of the modulus of M
using the symbolic ring and string manipulations.
Along the way, two of the computations take a few seconds each, but under a minute (on a 2014 MacBook Air).
To define the conjugate Mc
of M
, we turn M
into a string,
string M_str
,
then replace I
by (-I)
in that string, string to get Mc_str
, then convert
back to a symbolic expression:
sage: M_str = str(M)
sage: Mc_str = str(M).replace('I', M_str.replace('I', '(-I)')
sage: Mc = SR(Mc_str)
Compute Call W
the quantity (abs(M)^2 - 1)^2
computed using M*Mc
for abs(M)^2
:
sage: W = (M*Mc - 1)^2
Our goal is to prove that N + W
is zero.
See N
as a real algebraic number:
sage: N_aa = AA(N)
-0.1619085305331?
See W
as an algebraic number (not known to be real yet):
sage: W_qqbar = QQbar(W)
sage: W_qqbar
0.1619085305331120? + 0.?e-16*I
Examine the imaginary part:
sage: W_imag = W_qqbar.imag()
sage: W_imag
0.?e-16
Check whether it is actually zero:
sage: W_imag.is_zero() # takes a few seconds
True
Since Now that its imaginary part is zero, known to be zero,
we can see W
as a real algebraic number:
sage: W_aa = AA(W_qqbar)
sage: W_aa
0.1619085305331121?
Compute the sum of W
and N
(we hope it is zero):
sage: Z_aa = W_aa + N_aa
Does it look like it might be zero:
sage: Z_aa
0.?e-13
Is it actually zero:
sage: Z_aa.is_zero() # takes a few seconds
True
Finally:
sage: Z_aa
0
The main take-away hint is to work over AA
or QQbar
.
Ideally, compute in AA
or QQbar
(or in an appropriate
number field if you know which one to use) from the start
and avoid ending up with such complicated expressions.
Some ways to do this:
matrix(QQbar, ...)
instead of matrix(...)
r = AA(2).sqrt()
and use r
instead of sqrt(2)
QQ
Regarding other software, Calcium might help. See
Fredrik's answer here! (Thanks Fredrik!)
My initial approach was somewhat along the same lines
but did not quite get us there. I stopped the final
computations after several minutes or of intense cpu usage.
I still leave it here for comparison.
Having defined M
and N
as in the question...
Define corresponding elements in QQbar
or AA
:
sage: m = QQbar(M)
sage: n = AA(N)
sage: p = -(1-m.abs()^2)^2
Check their values:
sage: m
0.0154952449333661? - 0.772904461325769?*I
sage: n
-0.1619085305331?
sage: p
-0.1619085305331120?
So n
and p
might be equal...
Check their difference:
sage: d = p - n
sage: d
0.?e-13
Looks like it might be zero.
Checking Trying to check whether it is actually zero seems to take forever:
sage: d.is_zero() # takes too long
sage: AA(N) == -(1 - QQbar(M).abs()^2)^2 # takes too long