Следующее матричное уравнение в Σ - для заданных матриц B и C - фигурирует в моей работе как характеристика ковариационной матрицы. Я узнал, что это уравнение известно, в частности, в теории непрерывного управления временем, как уравнение Ляпунова , и что существуют различные хорошо известные алгоритмы для его решения, в которых используется особая природа этого линейного уравнения.
Из поиска в Google я также узнал, что существуют реализации Matlab и Fortran. Я нашел SLICOT и RECSY. Из-за проблем с лицензированием доступ к источнику SLICOT был остановлен.
Большая часть моей работы реализована на R, и, поскольку я не смог найти интерфейс R для решателя, я сам решил написать его. Тогда у меня вопрос, является ли SLICOT наилучшей доступной библиотекой Fortran (или C) с реализацией решателя уравнения Ляпунова? Я также заинтересован в реализации , которые могут обрабатывать большие разреженные матрицы.
Ответы:
SLICOT - это инструмент для решения сложных задач.
Для больших, но разреженных систем есть набор инструментов lyapack для MATLAB.
В Институте Макса Планка в Магдебурге, Германия, ведутся активные исследования разреженных уравнений Ляпунова. Однако объявлению о предстоящем выпуске наследника ляпака - MESS - исполнилось несколько лет. Тем не менее, стоит время от времени проверять веб-страницу MESS и публикации авторов.
Отказ от ответственности: мой научный руководитель является крупным спонсором SLICOT и lyapack, и я нахожусь в постоянном контакте с разработчиками MESS.
источник
Вы можете подключиться к MATLAB, используя это .
Ваши матрицы не слишком велики: ручное кодирование алгоритмов не должно привести к слишком большой потере времени, возможно, оно будет работать в течение 1 часа. Это может быть или не быть слишком длинным в зависимости от различных факторов.
Хотя сам кодировать его может быть непросто. Я не думаю, что смогу, и я имел дело с этим в течение последних нескольких месяцев. Но сам алгоритм SLICOT здесь .
источник
Алгоритм SLICOT не такой сложный, это редукция к форме Шура + некоторая обратная замена. Вы можете проверить документ Бартельс-Стюарт http://dl.acm.org/citation.cfm?id=361582, который достаточно читабелен и объясняет, как он работает. Статья посвящена несимметричному случаю, но не должно быть сложно адаптировать его к симметричному - вам просто нужна одна форма Шура вместо двух.
Вероятно, вы также можете написать его самостоятельно в R, если в нем уже есть подпрограмма для формы Шура (я бы сам проверил, но из-за их неудачного выбора имен всегда сложно получить значимые результаты о R из Google).
Это может решить плотный случай. Большой и редкий более технический.
источник