Моя цель в двух словах:
Учитывая матрицу 8x8 C У меня есть алгоритм, который создает другую матрицу 8x8 L = L (C) физически соответствующим образом, причем каждая запись L задается определенной (возможно, иррациональной) линейной комбинацией до 8 записей C .Я хочу найти конкретный выбор C , который является положительным полуопределенным и имеет большой ранг (7 или 8), но дает единственное число L .
Факты:
- Каждый положительный полуопределенный C может быть записан как C = U * U для некоторых U (где U * обозначает комплексное сопряжение транспонирования U ).
- В этом случае ker U = ker C , и, следовательно, ранг U и C одинаковы.
- Если U имеет невырожденную подматрицу 7x7 принципа, то ранг U не менее 7.
Наивное решение:
- Объявите U как матрицу символов 8x8 и создайте ** С одна тысяча пятьдесят восемь = U * U * 1 059 *.Это гарантирует, что C является положительно-полуопределенным.
- Определите V как верхнюю левую подматрицу 7x7 для U .Обратите внимание, что если V неособо, ранг C составляет не менее 7.
- Вычислить L из C .
- Попробуйте решить ([det (V) ~ = 0, det (L) == 0], [vars]) , где vars = записи U .
Сложность:
Одна непосредственная проблема заключается в том, что не каждый выбор U , который имеет ранг 7 или 8, будет иметь V неособо, поэтому матрица C , которую я ищу, может быть пропущена в этом режиме.Игнорируя это здесь, моя проблема для этого форума больше связана со сложностью проблемы:
Установив C = U * U и используя записи U в качествепеременные, каждая запись C становится суммой 8 членов, каждая степень 2. Например, запись c21 задается как
u11*conj(u12) + u21*conj(u22) + u31*conj(u32) + u41*conj(u42) + u51*conj(u52) + u61*conj(u62) + u71*conj(u72) + u81*conj(u82)
Поскольку каждая запись L является линейной комбинацией от 2 до 8 записей C , мы имеем, что каждая запись L является линейной комбинацией между 2 * 8 = 16 и 8 * 8 =64 степени степени 2 из записей U (или U *).Таким образом, det (L) является равномерной степенью 2 * 8 = 16 полиномов с 8! * 16 ^ 8≈10 ^ 14 и 8! * 64 ^ 8≈10 ^ 19 членов до упрощения.Мне нужно, чтобы этот многочлен был равен нулю, в то время как одновременно det (V) отличен от нуля (однородный многочлен степени 7 с 7! = 5040 членами).
Обратите внимание, что если один из них следует избегать использования C = U * U и вместо этого пусть элементы C будут переменными, тогда det (L) будет полиномом одинаковой степени 8 с числом от 8! *2 ^ 8≈10 ^ 7 и 8! * 8 ^ 8≈10 ^ 11 членов до упрощения.Мне нужно, чтобы этот многочлен был равен нулю, в то время как det (V) отличен от нуля, и некоторые дополнительные условия помещаются так, чтобы C был положительно полуопределенным (критерий Сильвестра и т. Д.).
Мой вопрос:
Есть ли более разумный способ сделать это?Конечно, определитель - не самый эффективный способ определить, является ли L единичным, но в идеале я хотел бы получить точный ответ для C , а не числовое приближение.
Я наиболее знаком с Matlab, но любые предложения, использующие любую систему (Python, Macaulay2, ...), будут очень оценены.Что касается вычислительной мощности, у меня есть доступ к нескольким кластерам суперкомпьютеров.
Редактирование:
Возможно, немного возвышенный вопрос.Более усваиваемые подвопросы:
Существует ли вычислительно более простой, идеально символический алгоритм определения, является ли матрица сингулярной (в отличие от вычисления определителя)?
Есть ли в вычислительном отношении более простой способ требовать, чтобы ответ был положительным полуопределенным (в отличие от установки C = U * U и использования записей U в качестве переменных)?
Существует ли менее строгий (но все еще простой в вычислительном отношении) способ требовать, чтобы C имел ранг 7 или 8?