2015-02-02 4 views
1

В начале я хотел бы извиниться за мой английский. Теперь давайте перейдем к моей проблеме.Решение уравнения с использованием факторизации LU без поворота (библиотека лака)

Я пытаюсь написать простой код, который будет найти решение системы линейных уравнений:

Ах = Ь

где А представляет собой квадратную матрицу NxN. В этой программе я использую библиотеку Lapack (я ДОЛЖЕН использовать LU-факторизацию без поворота).

Я нашел несколько примеров, например. g .: Understanding LAPACK calls in C++ with a simple example где мы можем увидеть, как использовать функции: dgetrf_ и dgetrs_. Но даже если я скопирую этот код (из лучшего ответа) в свою программу, он возвращает иногда правильные результаты (например, A и b такие же, как в лучшем ответе), а иногда и неправильные результаты (например, A = {1, -3, 1, -1}, b = {3, 5}, правильный ответ: {6, 1} и возврат функции {-4, 7}). Для больших матриц он возвращает неправильные результаты. Может ли кто-нибудь сказать, почему?

В этом месте: https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/lapackro1.htm написано:

LAPACK подпрограмма Предположит, входные матрицы не содержат IEEE 754 специальных значений, такие как INF или NaN. Использование этих специальных значений может привести к тому, что LAPACK вернет неожиданные результаты или станет нестабильным.

Я полагаю, что INF означает «бесконечность», а NaN означает «не номер», правильно?

И вторая проблема заключается в том, что если даже выше пример будет работать должным образом, он использует LU-факторизацию с частичным поворотным механизмом. Мне нужны функции из библиотеки Lapack, которые делают LU-факторизацию БЕЗ поворота. Я занимался исследованиями этой функции, но ничего не нашел. Есть ли кто-нибудь, кто знает, что это (или может быть) эта (эти) функция (функции)? Я теряю надежду на решение этой проблемы.

ответ

2

Подпрограммы LAPACK записываются в FORTRAN, а данные хранятся в столбце major. Вы решаете преобразованную матричную систему A A^T x = b. Попробуйте использовать A = {1, 1, -3, -1}.

Вы правы, INF означает «бесконечность», а NaN означает «Not A Number».

Алгоритм LU всегда использует поворот. Разложение Холецкого не использует поворот (dpotrf, dpotrs). Но тогда ваша матрица должна быть «симметричной положительно определенной».

+0

Большое спасибо за ваш ответ. Я хочу нажать стрелку вверх, но я не могу, потому что у меня слишком низкий рейтинг репутации. Вы правы, когда я переношу матрицу. Функция A возвращает правильные значения. Вы уверены, что алгоритм LU всегда использует поворот? Если да, возможно, я должен использовать LU-факторизацию с частичным поворотом. – Michal

+0

Если у вас есть асимметричные матрицы, вам нужно использовать LU с поворотом. Вы не можете выдвигать ответ, когда у вас низкая репутация. Вы можете принять только как правильное. – ztik

+1

Чтобы обеспечить более подробную информацию, требуется поворот, чтобы гарантировать существование факторизации LU для неособой матрицы A. Рассмотрим A = ((0, 1), (1, 0)). Не существует неособых треугольных L и U таких, что A = LU. Необходимо сначала применить строку-обмен («поворот»), чтобы получить факторизацию формы PA = LU, после чего мы имеем L = U = тождество. –

 Смежные вопросы

  • Нет связанных вопросов^_^