Перевірка, чи є матриця позитивною напіввизначеною


12

У мене є список L симетричних матриць, які мені потрібно перевірити на наявність позитивної напіввизначеності (тобто їх власні значення невід'ємні.)

У коментарі вище випливає, що можна зробити це, обчисливши відповідні власні значення і перевіривши, чи вони негативні (можливо, потрібно потурбуватися про помилки округлення.)

Обчислення власних значень в моєму сценарії досить дороге, але я помітив, що бібліотека, яку я використовую, має досить швидкий тест на позитивну визначеність (тобто, якщо власні значення матриці є суто позитивними.)

Звідси випливає думка, що, маючи матрицю , один тест, якщо B + ϵ I позитивно визначений. Якщо це не так, B не є позитивним напіввизначеним, інакше можна обчислити власні значення B, щоб переконатися, що це дійсно позитивні напіввизначені.BLB+ϵIBB

Моє питання зараз:

Чи існує більш прямий та ефективний спосіб перевірити, чи є матриця напіввизначеною позитивною, за умови надання ефективного тесту на позитивну визначеність?


1
A


1
B+cIccc

Так, ви можете змістити власні значення і обчислити найменше власне значення, але у вас все ще виникає проблема встановити деяку толерантність до того, що ви приймете (і переконатися, що ваші власні значення обчислюються принаймні такою толерантністю!)
Брайан Борчерс

Не впевнений, чи було б це корисно, але зауважте, що як тільки ви знаєте, що матриця не є позитивно визначеною, для перевірки, чи є вона позитивною напівмешиною, вам просто потрібно перевірити, чи не є її ядро ​​непорожнім.
Абель Моліна

Відповіді:


23

Яке ваше робоче визначення "позитивний напівдефініт" або "позитивний певний"? У арифметиці з плаваючою комою вам доведеться вказати якусь толерантність для цього.

Aλ=1.01030λ=1.0

λ максϵ|λmax|λmax

На жаль, обчислення всіх власних значень матриці займає досить багато часу. Інший часто використовуваний підхід полягає в тому, що симетрична матриця вважається певною позитивною, якщо матриця має аліфметику Холеського в арифметиці з плаваючою комою. Обчислення факторизації Чолеського на порядок швидше, ніж обчислення власних значень. Ви можете поширити це на позитивну напівкінність, додавши до матриці невеликий кратний ідентичність. Знову виникають проблеми масштабування. Один з швидких підходів - це зробити симетричне масштабування матриці, щоб діагональні елементи дорівнювали 1,0 і додати до діагоналі перед обчисленням факторизації Чолеського. ϵ

Але ви повинні бути обережні з цим, оскільки є деякі проблеми з підходом. Наприклад, існують обставини, коли і є позитивно визначеними в тому сенсі, що вони мають коефіцієнти Чолеського з плаваючою точкою, але не має факторизації Чолеського. Таким чином, множина "плаваючої точки Чолеського, що визначає позитивні певні матриці" не опукла! B ( A + B ) / 2AB(A+B)/2


Не могли б ви детальніше зупинитися на останньому абзаці або опублікувати посилання на джерело? Це досить химерно.
Даніель Шаперо

2
Класична посилання на це масштабування - А. ван дер Слуй. Числа умов і врівноваження матриць Numerische Mathematik 14 (1): 14-23, 1969 р. Це також обговорюється в таких підручниках, як Голуб та Ван Кредит. Біт в останньому абзаці - це важкий переможений особистий досвід пошуку кодування рядків у напіввизначеному коді програмування - я стикався з ситуаціями, коли і мають фактори Чолеського по LAPACK, але не має факторизації Холеського згідно з LAPACK. Такі проблеми починають виникати, коли ви майже єдині. X + α Δ X X + 0,95 α Δ XXX+αΔXX+0.95αΔX
Брайан Борчерс

1
Також не рідкість виявити, що деякі матриці можна визначати за допомогою Чолеського в розширеній чи вчетверній точності, але не в регулярній арифметиці з плаваючою точкою з подвійною точністю або одинарною точністю.
Брайан Борчерс

3
Декілька первинно-подвійних внутрішніх точок коду для SDP (CSDP, SDPT3, SDPA) завжди повертають матриці, які є позитивно визначеними і мають чинники Чолеського, тоді як інший популярний вирішувач (SeDuMi) використовує власне значення розкладу і повертає рішення, які мають дуже малий негативний власні значення.
Брайан Борчерс

3

5
Схоже, ім’я користувача в значній мірі розкриває стосунки між автором відповіді та автором робіт. Трохи більше інформації про те, що міститься в роботі, було б непогано; хоча, у будь-якому випадку, це дуже цікавий і актуальний для списку запитань статей!
Антон Меншов

0

Python для пропозиції @Brian Borchers, спробуйте розкладку Чольського:

from sksparse.cholmod import cholesky, CholmodNotPositiveDefiniteError
    # https://scikit-sparse.readthedocs.io/en/latest/cholmod.html

def testposdef( A, beta=1e-6, pr="" ):
    """ try cholesky( a scipy.sparse matrix  + beta I )

    Why A + beta I, beta say 1e-6 ?
    If A has tiny eigenvalues, 0 to within machine precision,
    about half of these "zeros" may be negative -- tough on solvers.
    Also the condition number improves to ~ rho(A) / beta.
    """
    try:
        solve = cholesky( A, beta=beta )  # A + beta I
        if pr:
            print( "%s + %g I is positive-definite" % (pr, beta ))
        return solve  # x = solve( b )
    except CholmodNotPositiveDefiniteError:
        if pr:
            print( "%s + %g I is not positive-definite" % (pr, beta ))
        return False
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.