Численно устойчивое явное решение малой линейной системы


11

У меня есть неоднородная линейная система

AИксзнак равноб

где - вещественная матрица с . Гарантируется, что нулевое пространство в A имеет нулевую размерность, поэтому уравнение имеет единственный обратный x = A - 1 b . Поскольку результат попадает в правую часть ODE, которую я намерен решить с помощью адаптивного метода, важно, чтобы решение было гладким по отношению к небольшим вариациям элементов A и b . Из-за этого требования и небольшой размерности я подумал реализовать явные формулы для A - 1 bn × n n 4AN×NN4AИксзнак равноA-1бAбA-1б, Элементы могут быть ровно нулевыми или принимать совершенно разные значения. Мой вопрос: имеет ли это смысл для вас и существуют ли для этого стабильные выражения? Я кодирую в C для систем x86.


Я знаю, что это происходит очень поздно, но вот мое предложение: поскольку известно, что устранение по Гауссу с полным поворотом стабильно, имеет смысл жестко закодировать алгоритм для крошечных размеров. Поворот усложняет вопрос, поскольку существует способа выбора последовательных стержней, приводящих к ( n ! ) 2 различным наборам формул; Вы можете уменьшить эту сложность, меняя то, что нужно поменять местами, сократив число дел до 1 2 + 2 2 + n 2 . (N!)2(N!)212+22+N2
Ив Дауст

Ответы:


6

Перед реализацией явных формул я хотел бы задать себе вопрос: «Стоит ли это того?»:

  • Стоит ли тратить время на написание, отладку и проверку этих явных формул, в то время как вы можете легко ссылаться на BLAS + LAPACK, которые используют классическое исключение Гаусса?
  • Ожидаете ли вы обрести стабильность? Я не думаю, что программирование явных формул (как правило Крамера), наоборот, даст вам лучшую стабильность.
  • Ожидаете ли вы набрать скорость? Вы уже профилировали всю свою программу? Какая доля времени уходит на решение этих 4х4 систем?
  • Какова вероятность того, что через год вы улучшите свою модель и вам нужно 5 уравнений вместо 4?

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


На его реализацию уходит около 15 минут, потому что я просто вписываю общую матрицу 1x1, 2x2, 3x3 и 4x4 в CAS (Maple for me) и инвертирую ее. Он должен возвращать явный (C-подобный) результат (предположительно основанный на правиле Крамера). Ваш второй момент - это моя забота. В результате будут более высокого порядка произведения матричных элементов. Очевидно, что это может привести к ошибкам из-за «почти отмены» различных терминов. Но вопрос в том, можно ли записать результат в форме, в которой этого не происходит. Скорость не главное беспокойство в этом месте.
Highsciguy

6

Единственный явный обратный результат, о котором я знаю, - это правило Крамера , которое, как недавно было показано, вычислимо за времени (как, например, исключение Гаусса; неуверенность в константе перед ведущим фактором).О(N3)

Матрица, обратная к является гладкой функцией от A до тех пор, пока det ( A ) 0 , а решение x , безусловно, является гладкой функцией от b , так что если правая часть ODE является гладкой функцией от x и вы избегаете случаев, когда A имеет недостаток ранга, я думаю, что ваша правая сторона будет гладкой. (Здесь я понимаю, что «гладкий» означает «по крайней мере, дважды непрерывно дифференцируемый».)AAйе(A)0ИксbИксA

Чтобы быть в безопасности, вероятно, лучше убедиться, что не имеет числового ранга (то есть не имеет малых сингулярных значений).A

Проблема с правилом Крамера состоит в том, что его свойства устойчивости неизвестны, за исключением случая (который стабилен вперед, но не обратно стабилен). (См. Точность и стабильность численных алгоритмов , 2-е издание, Н. Хайм.) Он не считается надежным алгоритмом; Гауссово исключение с частичным поворотом (GEPP) является предпочтительным.Nзнак равно2

Я ожидаю, что проблема с использованием BLAS + LAPACK для выполнения GEPP при решении ODE будет заключаться в любом конечном разнице, используемой в неявном методе ODE. Я знаю, что люди решали линейные программы как часть оценки с правой стороны, и поскольку они делали это наивно (просто подключили решение линейной программы к правой части, вызывая симплексный алгоритм), они значительно снизили точность своих вычислил решение и существенно увеличил время, необходимое для решения проблемы. Один мой товарищ выяснил, как решить такие проблемы гораздо более эффективно и точно; Мне придется посмотреть, была ли опубликована его публикация. Вы можете столкнуться с подобной проблемой независимо от того, используете ли вы GEPP или правило Крамера.

Если есть какой-то способ, которым вы можете рассчитать аналитическую матрицу Якоби для вашей задачи, вы можете сделать это, чтобы избежать некоторых числовых головных болей. Это будет дешевле для оценки и, вероятно, более точным, чем метод конечных разностей. Выражения для производной обратной матрицы можно найти здесь, если они вам нужны. Оценка производной обратной матрицы выглядит так, как если бы она занимала как минимум два или три линейных решения системы, но все они были бы с одинаковой матрицей и разными правыми частями, поэтому она не была бы значительно дороже, чем одна линейная система решать.

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


Когда вы пишете «гладко», вы имеете в виду, что оно также гладко при оценке с конечной точностью, то есть стабильно (это то, что я пытался сказать). Смотрите также мой комментарий к ответу GertVdE. Я думаю, что могу исключить почти сингулярные матрицы (полагаю, что в таких случаях анализ моей физической проблемы должен быть переформулирован).
Highsciguy

1
Aйе(A)0

NA

-2

Не уверен, что это может помочь, но я просто думаю, что когда вы говорите о стабильном решении, вы говорите о методах приближения. Когда вы вычисляете вещи явно, стабильность не имеет смысла. Это означает, что вы должны принять приблизительное решение, если вы хотите заработать на стабильности.


5
Приближение с плавающей точкой (округление, отмена и т. Д.) - все считается, когда дело доходит до стабильности. Даже если у вас есть формула для ответа, вы должны решить, можно ли рассчитать ее точно в арифметике с конечной точностью.
Билл Барт

Я не считаю этот ответ таким негативным, как другие, похоже, видят его. Конечно, проблема стабильности существует и для явных результатов. Но я считаю, что ctNGUYEN просто хотел сказать, что приближенное решение, такое как разложение в небольшом количестве, на самом деле может быть более точным, чем полный явный результат, который, я думаю, является правильным. В некотором смысле я прошу явных решений, которые рассматривают такие сложные случаи, чтобы формула всегда была устойчивой.
Highsciguy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.