Тестування, якщо дві матриці 12х12 мають однаковий визначник


11

Мені дано матрицю яка симетрична, обернена, позитивно визначена і щільна. Мені потрібно перевірити, чи де J - матриця всіх.12×12Q

det(Q)=det(12IQJ)(1)
J

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

  1. Чи є якийсь трюк, який я міг би використати для швидшого обчислення визначника, враховуючи, що я знаю їх розмір? Можливо, безладне розширення для 12×12 матриць 12 \ times12, які могли б працювати в цьому випадку?

  2. Чи є інший ефективний спосіб перевірити рівність (1)

Редагувати. Щоб відповісти на коментарі. Мені потрібно обчислити всі підключені недоповнюючі додаткові графіки G порядку 13 таким чином, щоб G та G¯ мали однакову кількість діючих дерев. Мотивацію для цього можна знайти у цій публікації про математичний потік . Що стосується машини, я працюю на 8-ядерній машині 3,4 ГГц паралельно.

Редагувати. Мені вдалося скоротити очікуваний час роботи на 50%, зробивши програму C для конкретного обчислення визначника 12×12 матриці. Пропозиції все ще вітаються.


6
Як повільно занадто повільно? Скільки часу займає яке обладнання? Чи незалежні трильйони цих , щоб ви могли паралельно обчислити багато цих визначників? Якщо так, то на якій великій машині можна працювати? Що призвело до цієї проблеми? Ви впевнені, що вам потрібно обчислити детермінанти? Q
Білл Барт

3
Як часто (для якої частки випадків) детермінанти однакові / різні? Якщо вони відрізняються більшу частину часу, може бути більш дешевий тест, щоб визначити, що вони можуть бути різними, і ви переконаєтесь, що вони однакові, лише якщо перший тест не вдався. І навпаки, якщо вони однакові більшість часу.
Вольфганг Бангерт

1
Як вже запитували: чи можете ви надати детальну інформацію про те, звідки ? Можливо, є кращий підхід, ніж сліпо обчислювальні детермінанти. Q
JM

4
Ідея, що ця умова повинна бути перевірена "на трильйон матриць", говорить про те, що 1) відомо, що apriori має якусь особливу структуру (інакше очікування, що умова виконується навмання, є незначним), і 2) що кращий підхід може бути охарактеризовано всі матриці з цією властивістю (з ефективно складною формулою). QQ
хардмат

1
@hardmath Так, - ціла матриця, що має діагональні записи від до та як діагональні елементиQ1121
Jernej

Відповіді:


8

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

Це швидше, ніж LU-факторизація, а також швидше, ніж Холеський, оскільки уникають квадратних коренів. Визначальним фактором є просто добуток елементів діагональної матриціКод для проведення LDL-факторизації настільки простий, що ви можете записати його менш ніж за 50 рядків C. Сторінка Вікіпедії на ньому описує алгоритм, і у мене є простий шаблоновий код, щоб зробити тут Чолеського . Ви можете значно спростити це та змінити його, щоб уникнути квадратного кореня для впровадження факторизації.DLDLT

Оскільки ви також можете керувати форматом пам’яті, ви можете додатково оптимізувати розпорядок зберігання лише половини матриці та упакувати її в лінійний масив, щоб максимізувати локальність пам’яті. Я також писав би прості користувацькі крапки з оновленнями продукту та ранг-1, оскільки розміри проблем настільки малі, ви повинні дозволити компілятору вписати підпрограми, щоб зменшити накладні витрати. Оскільки це цикл фіксованого розміру, компілятор повинен мати можливість автоматично вбудовувати та розгортати речі, коли це доречно.

Я б не намагався грати в трюки, щоб скористатися тим, що містить всередині виразу. Ймовірно, що для таких невеликих розмірів проблеми ці трюки закінчуються повільніше, ніж просто виконання двох окремих обчислювальних факторів. Звичайно, єдиний спосіб перевірити ці твердження - це спробувати.12IQJQ


1
По-друге, рекомендую реалізувати , також без кореня Чолеського, оскільки, схоже, у Armadillo не існує способу скористатись позитивно-визначеним / діагональним домінуванням. LDLT
хардмат

5

Без будь-якої інформації про побудову цих позитивних визначених реальних симетричних матриць, пропозиції, які слід зробити, є необхідними досить обмеженими.12×12

Я завантажив пакет Armadillo з Sourceforge і ознайомився з документацією. Спробуйте покращити продуктивність окремих обчислень та , де - матриця першої категорії всіх, встановивши, наприклад . У документації зазначається, що для матриць розміром до це значення за замовчуванням, тому за пропуском я припускаю, що цей варіант є типовим для випадку .det(Q)det(12IQJ)Jdet(Q,slow=false)4×4slow=true12×12

Що slow=true імовірно робить часткове або повне поворотний в отриманні форми ешелонованої рядки, з яких визначник легко знайдений. Однак ви заздалегідь знаєте, що матриця є позитивно визначеною, тому повороти не потрібні для стабільності (принаймні, припущену для більшості ваших обчислень. Незрозуміло, чи пакет Armadillo кидає виняток, якщо оберти стають надмірно маленькими, але це має бути особливість розумною числовий лінійної алгебри пакет. EDIT: Я знайшов код Armadillo , який реалізує в заголовки , з допомогою шаблонів C ++ для істотної функціональності настройка. чи не здається , впливає , якQdetinclude\armadillo_bits\auxlib_meat.hppslow=false12×12детермінант буде зроблено, оскільки обчислення в цьому місці "перекидаються на стіну" до ЛАПАКА (або ATLAS), не вказуючи на те, що повороти не потрібно; див. det_lapackта виклики у цьому файлі.

Іншим моментом було б дотримуватися їх рекомендації щодо створення пакету Armadillo, який посилається на швидкісні заміни для BLAS та LAPACK, якщо ви їх справді використовуєте; див. розд. 5 файлу Armadillo README.TXT для детальної інформації. [Використання спеціальної 64-розрядної версії BLAS або LAPACK також рекомендується для швидкості на сучасних 64-бітних машинах.]

Зведення рядків до ешелонової форми по суті є гауссовим усуненням і має арифметичну складність . Для обох матриць це означає, що це вдвічі більше, ніж робота, або . Ці операції цілком можуть бути «вузьким місцем» у вашій обробці, але мало сподівань, що без спеціальної структури в (або деяких відомих співвідношеннях між трильйоном тестових випадків, що дозволяють амортизувати), робота може бути зведена до .23n3+O(n2)43n3+O(n2)QO(n2)

Для порівняння, розширення на коефіцієнти загальної матриці включаєоперації множення (і приблизно стільки ж додавання / віднімання), тому для порівняння ( проти ) явно сприяє усуненню над коефіцієнтами.n×nn!n=1212!=47900160023n3=1152

Інший підхід, що вимагає роботи , буде зведення до тридіагональної форми з перетвореннями Householder, що також приводить у тридіагональну форму. Після цього обчислення і можуть бути виконані в операціях . [Ефект оновлення першого рангу у другому визначнику можна виразити як скалярний коефіцієнт, заданий розв’язуванням однієї тридіагональної системи.]43n3+O(n2)Q12IQdet(Q)det(12IQJ)O(n)J

Реалізація такого незалежного обчислення може бути корисною як перевірка результатів успішних (або невдалих) викликів до detфункції Armadillo .

Особливий випадок: Як запропоновано коментарем Джернея, припустимо, що де як і раніше, є матрицею (ранг 1) усіх, а - a несинулярна (позитивна) діагональна матриця. Дійсно, для запропонованого застосування в теорії граф це були цілі матриці. Тоді явна формула для :Q=DJJD=diag(d1,,dn)det(Q)

det(Q)=(i=1ndi)(1i=1ndi1)

Ескіз його доказування дає можливість проілюструвати більш широку застосовність, тобто, коли має відомий детермінант і система швидко вирішується. Почнемо з розбивки:DDv=(11)T

det(DJ)=det(D)det(ID1J)

Тепер знову ранг 1, а саме . Зауважимо, що другий визначник - це просто:D1J(d11dn1)T(11)

f(1)=det(ID1J)

де є характеристичним поліномом . Як матриця 1-го рангу, повинна мати (принаймні) коефіцієнтів для врахування її нульового простору. "Відсутнє" власне значення - , як видно з обчислень:f(x)D1Jf(x)n1xdi1

D1J(d11dn1)T=(di1)(d11dn1)T

Звідси випливає, що характеристичний многочлен , а такий, як показано вище для , .f(x)=xn1(xdi1)f(1)det(ID1J)1di1

Також зауважте, що якщо , то - діагональна матриця, визначником якої є просто добуток її діагональних записів.Q=DJ12IQJ=12ID+JJ=12ID


Hm .. насправді де є матрицею суміжності тому я думаю, що цей результат може бути невірним. Зокрема, це означає, що кількість дерев, що охоплюють графік , визначається його ступінчастою послідовністю, яка не відповідає. QDAAGG
Jernej

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

@Jernej: Якщо ви вважаєте, що щось, про що я заявив, є невірним, я створив кімнату чату на основі цього питання, де дискусія може бути поточною, без зайвих коментарів тут.
хардмат

1

Якщо у вас є структурований спосіб перерахування графіків, який ви хочете обчислити детермінантами, можливо, ви можете знайти оновлення низького рангу, які переносять вас з одного графіка на інший.

Якщо так, то ви можете використовувати лемму детермінантної матриці, щоб дешево обчислити визначник наступного графа, який слід перерахувати, використовуючи ваші знання про визначник поточного графіка.

Тобто для матриці і векторів : Це можна узагальнити, якщо U і V матриць і - : Au,v

det(A+uvT)=(1+vTA1u)det(A)
n×mAn×n
det(A+UVT)=det(Im+VTA1U)det(A)

Для ефективного обчислення оберненого ви можете скористатися формулою Шермана-Моррісона, щоб отримати інверсію наступної матриці від поточної:

(A+uvT)1=A1A1uvTA11+vTA1u

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.