Как проверить, что матрица положительно определена |
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://wasp.phys.msu.ru/forum/index.php?showtopic=18742
Дата изменения: Unknown Дата индексирования: Sun Apr 10 05:01:46 2016 Кодировка: Windows-1251 |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
Как проверить, что матрица положительно определена |
![]() ![]()
Сообщение
#1
|
|
![]() уважаемый ![]() ![]() ![]() ![]() ![]() ![]() Группа: Профи Сообщений: 184 Репутация: 15 Предупреждения: (0%) ![]() ![]() |
Нужна помощь с кодом.
Есть много симметричных матриц вида correlation(i,j)= 1............ 0,5......... 0,7......... 0,5......... 0,76 0,5......... 1............ 0,3......... 0,4......... 0,82 0,7......... 0,3......... 1............ 0,7......... 0,6 0,5......... 0,4......... 0,7......... 1............ 0,34 0,76....... 0,82....... 0,6......... 0,34....... 1 (простите за точки, но LATEX не работает что-то) Размером от 1х1 (число=1) до 5x5. Нужно сделать (в идеале на VBA, ибо остальной код - это макрос экселя.....) проверку, является ли матрица положительно определенной. Заранее спасибо. Сообщение отредактировал BettaRomeo - 18.11.2011, 16:25
Прикрепленные файлы
-------------------- Совет стоматолога: Помните - ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью, как уважительное отношение к окружающим.
--- Незнание законов физики не освобождает от ответственности за их нарушение. |
![]()
Сообщение
#2
|
|
уже не чужой ![]() ![]() Группа: Участники Сообщений: 22 Репутация: 2 Предупреждения: (0%) ![]() ![]() |
Может быть, попробовать критерий Сильвестра? В данном случае, раз матрицы максимально размером 5x5, то проблем с вычислением определителя по времени быть не должно (в худшем случае придется считать 5 определителей).
Сообщение отредактировал novice - 18.11.2011, 17:38 |
![]()
Сообщение
#3
|
|
![]() ... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Элита Сообщений: 2,145 Репутация: 42 Предупреждения: (0%) ![]() ![]() |
Для неотрицательно определенных матриц критерий действует только в одну сторону: если форма неотрицательно определена, то главные миноры неотрицательны. Обратное неверно.
-------------------- "Каждое достаточно большое множество чисел, точек или объектов обязательно содержит высоко упорядоченную структуру".
Фрэнк Пламптон Рамсей --------------------------------------------------------------------------- 'Simplex sigillum veri' |
![]()
Сообщение
#4
|
|
уже не чужой ![]() ![]() Группа: Участники Сообщений: 22 Репутация: 2 Предупреждения: (0%) ![]() ![]() |
По критерию: квадратичная форма является положительно определенной тогда и только тогда, когда все угловые миноры ее матрицы положительны.
Ссылка на вики: http://ru.wikipedia.org/wiki/%D0%9A%D1%80%...%82%D1%80%D0%B0 А нужно ведь проверить, является ли матрица положительно определенной. Тогда нужно все угловые миноры проверить на положительность. Или нужно еще проверить, является ли матрица неотрицательно определенной? Сообщение отредактировал novice - 18.11.2011, 23:05 |
![]()
Сообщение
#5
|
|
![]() ... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Элита Сообщений: 2,145 Репутация: 42 Предупреждения: (0%) ![]() ![]() |
Если какой либо из миноров равен нулю, то положительной определенности уже не будет.
-------------------- "Каждое достаточно большое множество чисел, точек или объектов обязательно содержит высоко упорядоченную структуру".
Фрэнк Пламптон Рамсей --------------------------------------------------------------------------- 'Simplex sigillum veri' |
![]()
Сообщение
#6
|
|
уже не чужой ![]() ![]() Группа: Участники Сообщений: 22 Репутация: 2 Предупреждения: (0%) ![]() ![]() |
Цитата Нужно сделать (в идеале на VBA, ибо остальной код - это макрос экселя.....) проверку, является ли матрица положительно определенной. Цитата Если какой либо из миноров равен нулю, то положительной определенности уже не будет. Проверяем все миноры подряд, начиная с меньшего. Если какой-то минор отрицательный или нулевой, то матрица не является положительно определенной. Например: у приведенной Вами матрицы миноры будут: 1, 0.75, 0.38, 0.1764, 0.0109072. Все положительные. Значит, матрица положительно определенная. В чем проблема? |
![]()
Сообщение
#7
|
|
![]() ... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Элита Сообщений: 2,145 Репутация: 42 Предупреждения: (0%) ![]() ![]() |
Смотрите первый пост.
Нужен код. -------------------- "Каждое достаточно большое множество чисел, точек или объектов обязательно содержит высоко упорядоченную структуру".
Фрэнк Пламптон Рамсей --------------------------------------------------------------------------- 'Simplex sigillum veri' |
![]()
Сообщение
#8
|
|
уже не чужой ![]() ![]() Группа: Участники Сообщений: 22 Репутация: 2 Предупреждения: (0%) ![]() ![]() |
Рад бы помочь, но не владею VBA. Так что кодом помочь не смогу.
P.S. Единственное, что могу добавить: в Excel 2010 есть функция "МОПРЕД(матрица в массиве)" (например: "=МОПРЕД(A1:E5)"), которая ищет определитель. Может это чем-нибудь поможет. Сообщение отредактировал novice - 19.11.2011, 22:17 |
![]()
Сообщение
#9
|
|
![]() уважаемый ![]() ![]() ![]() ![]() ![]() ![]() Группа: Профи Сообщений: 184 Репутация: 15 Предупреждения: (0%) ![]() ![]() |
Переберем все левые верхние квадраты по возрастанию и найдем от них определители. Если определитель неположительный - сообщим ошибку.
Пусть dimension - текущая размерность в цикле ndim - максимальная размерность i и j - номера строк и столбцов в матрице cells(х,у) - взятие данных из ячейки excel из столбца х и строки у Итак: For dimension = 1 to ndim For i = 1 to dimension for j = 1 to dimension correl(i,j) = Cells (i,j) next j next i opredelitel=МОПРЕД (correl) if opredelitel < 0 or opredelitel = 0 then message box = "матрица определена неверно" end if next dimension Если это математически правильно, то остается только правильно написать синтаксис. -------------------- Совет стоматолога: Помните - ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью, как уважительное отношение к окружающим.
--- Незнание законов физики не освобождает от ответственности за их нарушение. |
![]() ![]() |
Текстовая версия | Сейчас: 10.04.2016, 5:01 |