2

Very much related to this question:

Checking if a symbolic matrix is positive semi-definite

Is there a way to tell for which values of symbols a matrix is positive definite? For instance if M = {{a,0}, {0,b}} the function should look like rangePositiveDefiniteQ[M, {a,b}] and return {a>0 && b>0}. I have a feeling this is extremely computationally expensive and unfeasible.

Thanks in advance!

Takoda
  • 765
  • 3
  • 10

1 Answers1

1

For not too difficult problems, you could use Reduce + Eigenvalues:

positiveDefiniteQ[m_, v_] := Reduce[
    Thread[Eigenvalues[m] > 0],
    v,
    Reals
]

Your example:

positiveSemiDefiniteQ[{{a, 0}, {0, b}}, {a, b}]

a > 0 && b > 0

For the example in the linked question, define positiveSemiDefiniteQ:

positiveSemiDefiniteQ[m_, v_] := Reduce[
    Thread[Eigenvalues[m] >= 0],
    v,
    Reals
]

Then:

positiveSemiDefiniteQ[
    {{1,0,0,Sqrt[1-p]},{0,0,0,0},{0,0,p,0},{Sqrt[1-p],0,0,1-p}},
    p
]

0 <= p <= 2

Carl Woll
  • 130,679
  • 6
  • 243
  • 355