Приветствую!
Не могли бы вы, как программисты и математики, помочь советом по небольшому вопросу, возникшему в процессе нашей работы?
Суть вот в чем.
В своих расчетах акустических задач мной используются разреженные матрицы полученные по методу конечных элементов.
Даные матрицы - симметричные, комплексные и разреженные. Именно симметричные, а не Эрмитовы.
Мы нашли способ оптимизации скорости вычислений, но для этого нам нужно факторизовать исходную матрицу (сделать разложение Холецкого) и затем провести некоторые манипуляции с факторами.
Для справки. Разложение Холецкого - представление исходной положительно определенной матрицы в виде произведения нижнетреугольной и верхнетреугольной матриц, а именно A=LLt, где А - исходная матрица, L - нижнетреугольная матрица, t - транспонирование.
Так вот.
Большая часть существующих математических библиотек не позволяет вытащить L фактор в процессе решения.
Есть библиотека Флоридского университета, которая позволяет провести быстую факторизацию Холецкого, и вывести факторы.
Однако эта библиотека может проделывать операции только с положительно определенным матрицами. Кроме того, эта библиотека работает с эрмитовыми матрицами, разлагая их как A=LLh, (h - комплексно сопряженное транспонирование).
Если матрица не положительно определена, то в процессе вычисления Холецкого возникает необходимость взять корень от отрицательного числа, срабатывает ограничение и библиотека выдает ошибку.
В действительности же специфика наших задач позволяет проигнорировать это ограничение, что я проверил на нескольких тестовых расчетах в матлабе.
Вот теперь два вопроса.
1. Можно ли изменить исходный код этой флоридской библиотеки (исходники вроде бы есть и написаны они на СИ, а я в этом не понимаю ничего), чтобы она игнорировала проверку на корень из отрицательного числа, и делала не LLh разложение, а LLt?
(Ссылка, если что
http://www.cise.ufl.edu/research/sparse/cholmod)
2. Мог бы кто-нибудь это проделать?
Спасибо.