Jaka jest twoja robocza definicja „pozytywnego półfinału” lub „pozytywnego określonego”? W arytmetyki zmiennoprzecinkowej będziesz musiał określić pewną tolerancję.
Można to zdefiniować w kategoriach obliczonych wartości własnych macierzy. Należy jednak najpierw zauważyć, że obliczone wartości własne macierzy są skalowane liniowo z macierzą, tak że na przykład macierz, którą otrzymuję, mnożąc przez milion, ma swoje wartości własne pomnożone przez milion. Czy jest ujemną wartością własną? Jeśli wszystkie inne wartości własne macierzy są dodatnie i rzędu , to jest faktycznie 0 i nie powinno być traktowane jako ujemna wartość własna. Dlatego ważne jest, aby wziąć pod uwagę skalowanie. λ = - 1,0 10 30 λ = - 1,0Aλ=−1.01030λ=−1.0
Rozsądnym podejściem jest obliczenie wartości własnych macierzy i zadeklarowanie, że macierz jest liczbowo dodatnia półfinałowa, jeśli wszystkie wartości własne są większe niż, gdzie jest największą wartością własną. −ϵ|λmax|λmax
Niestety, obliczenie wszystkich wartości własnych macierzy jest dość czasochłonne. Innym powszechnie stosowanym podejściem jest to, że macierz symetryczna jest uważana za pozytywnie określoną, jeśli macierz ma współczynnik Choleskiego w arytmetyki zmiennoprzecinkowej. Obliczenie faktoryzacji Choleskiego jest o rząd wielkości szybsze niż obliczenie wartości własnych. Możesz to rozszerzyć do dodatniej półkompletności, dodając niewielką wielokrotność tożsamości do matrycy. Ponownie pojawiają się problemy ze skalowaniem. Jednym szybkim podejściem jest wykonanie symetrycznego skalowania macierzy, tak aby elementy ukośne miały wartość 1,0 i dodać do przekątnej przed obliczeniem faktoryzacji Choleskiego. ϵ
Powinieneś jednak zachować ostrożność, ponieważ istnieją pewne problemy z podejściem. Na przykład, istnieją okoliczności, w których i są dodatnie określone w tym sensie, że mają zmiennoprzecinkowe rozkłady Choleskiego, ale nie mają rozkładów Choleskiego. Zatem zestaw „zmiennoprzecinkowych macierzy Cholesky'ego, które można podzielić na czynniki dodatnie”, nie jest wypukły! AB(A+B)/2