2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Разложение Холецкого
Сообщение28.03.2012, 21:39 
Приветствую!
Не могли бы вы, как программисты и математики, помочь советом по небольшому вопросу, возникшему в процессе нашей работы?

Суть вот в чем.
В своих расчетах акустических задач мной используются разреженные матрицы полученные по методу конечных элементов.

Даные матрицы - симметричные, комплексные и разреженные. Именно симметричные, а не Эрмитовы.

Мы нашли способ оптимизации скорости вычислений, но для этого нам нужно факторизовать исходную матрицу (сделать разложение Холецкого) и затем провести некоторые манипуляции с факторами.

Для справки. Разложение Холецкого - представление исходной положительно определенной матрицы в виде произведения нижнетреугольной и верхнетреугольной матриц, а именно A=LLt, где А - исходная матрица, L - нижнетреугольная матрица, t - транспонирование.

Так вот.
Большая часть существующих математических библиотек не позволяет вытащить L фактор в процессе решения.

Есть библиотека Флоридского университета, которая позволяет провести быстую факторизацию Холецкого, и вывести факторы.

Однако эта библиотека может проделывать операции только с положительно определенным матрицами. Кроме того, эта библиотека работает с эрмитовыми матрицами, разлагая их как A=LLh, (h - комплексно сопряженное транспонирование).

Если матрица не положительно определена, то в процессе вычисления Холецкого возникает необходимость взять корень от отрицательного числа, срабатывает ограничение и библиотека выдает ошибку.

В действительности же специфика наших задач позволяет проигнорировать это ограничение, что я проверил на нескольких тестовых расчетах в матлабе.

Вот теперь два вопроса.

1. Можно ли изменить исходный код этой флоридской библиотеки (исходники вроде бы есть и написаны они на СИ, а я в этом не понимаю ничего), чтобы она игнорировала проверку на корень из отрицательного числа, и делала не LLh разложение, а LLt?

(Ссылка, если что http://www.cise.ufl.edu/research/sparse/cholmod)

2. Мог бы кто-нибудь это проделать?

Спасибо.

 
 
 
 Re: Разложение Холецкого
Сообщение29.03.2012, 14:29 
1. Раз Вы понимаете, что
Цитата:
Разложение Холецкого - представление исходной положительно определенной матрицы...
то не должны жаловаться, что
Цитата:
эта библиотека может проделывать операции (т.е. разложение Холецкого) только с положительно определенными матрицами

2. Попробуйте LDL-разложение ($A = L D L^T$) с соседней страницы:
Цитата:
LDL is a set of concise routines for factorizing symmetric positive-definite sparse matrices, with some applicability to symmetric indefinite matrices.

3. Если Ваши матрицы - не положительно определенные, то используйте методы общего вида (A=LU), например, QR или LQ разложение. В той же самой библиотеке Флоридского университета есть QR.

4. Для вещественных матриц эрмитовость - это та же симметричность.

 
 
 
 Re: Разложение Холецкого
Сообщение29.03.2012, 15:44 
Yuri Gendelman в сообщении #553435 писал(а):
Попробуйте LDL-разложение () с соседней страницы:Цитата:LDL is a set of concise routines for factorizing symmetric positive-definite sparse matrices, with some applicability to symmetric indefinite matrices.


Во-первых, данная реализация очень медленная.
Во-вторых для комплексных симметричных не работает.

-- 29.03.2012, 16:45 --

Yuri Gendelman в сообщении #553435 писал(а):
. Если Ваши матрицы - не положительно определенные, то используйте методы общего вида (A=LU)


Да так можно сделать, но при этом потребности во времени вычислений и оперативной памяти возрастают в два раза, и 64Гб оперативки уже не хватает

 
 
 
 Re: Разложение Холецкого
Сообщение29.03.2012, 21:06 
Suvorov.as в сообщении #553452 писал(а):
при этом потребности во времени вычислений и оперативной памяти возрастают в два раза, и 64Гб оперативки уже не хватает
как с вами связаться по е-майлу?

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group