Congruence of two non-positive definite matrices
Method here works only with positive definite matrices.
How to adapt it so that it works with non-positive definite matrices?
Both matrices a
and b
are positive definite:
a=matrix(2, 2, [5,2,2,3])
b=matrix(2, 2, [4,1,1,3])
print(a.is_positive_definite())
print(b.is_positive_definite())
qa=QuadraticForm(ZZ,a + a.transpose())
qb=QuadraticForm(ZZ,b + b.transpose())
x=qb.is_globally_equivalent_to(qa, return_matrix=True)
print(x)
print(x.transpose()*a*x==b)
True
True
[-1 0]
[ 1 1]
True
Here matrices a
and b
are not positive definite (which gives error):
a=matrix(2, 2, [6, 3, 3, 1])
b=matrix(2, 2, [6, -15, -15, 37])
print(a.is_positive_definite())
print(b.is_positive_definite())
qa=QuadraticForm(ZZ,a + a.transpose())
qb=QuadraticForm(ZZ,b + b.transpose())
x=qb.is_globally_equivalent_to(qa, return_matrix=True)
False
False
ValueError: not a definite form in QuadraticForm.is_globally_equivalent_to()
But there are at least these solutions for x
:
[[-1,2],[0,1]]
[[-1,2],[6,-13]]
[[-1,3],[0,-1]]
[[-1,3],[6,-17]]
[[1,-3],[-6,17]]
[[1,-3],[0,1]]
[[1,-2],[-6,13]]
[[1,-2],[0,-1]]
Which can be verified by:
x=matrix([[-1,2],[6,-13]])
x.transpose()*a*x==b
True