Насколько мне известно, есть 4 способа решения системы линейных уравнений (поправьте меня, если их больше):
- Если системная матрица является квадратной матрицей полного ранга, вы можете использовать правило Крамера;
- Вычислить обратную или псевдообратную матрицу системы;
- Используйте методы матричного разложения (гауссово или гауссово-жордановое исключение рассматривается как разложение LU);
- Используйте итерационные методы, такие как метод сопряженных градиентов.
Фактически, вы почти никогда не хотите решать уравнения, используя правило Крамера или вычисляя обратное или псевдообратное, особенно для многомерных матриц, поэтому первый вопрос - когда использовать методы разложения и итерационные методы соответственно. Я думаю, это зависит от размера и свойств системной матрицы.
Второй вопрос, насколько вам известно, какие методы разложения или итерационные методы наиболее подходят для определенной системной матрицы с точки зрения численной стабильности и эффективности.
Например, метод сопряженных градиентов используется для решения уравнений, в которых матрица является симметричной и положительно определенной, хотя его также можно применять к любым линейным уравнениям путем преобразования в . Также для положительно определенной матрицы вы можете использовать метод разложения Холецкого для поиска решения. Но я не знаю, когда выбрать метод CG, а когда выбрать разложение Холецкого. Мне кажется, нам лучше использовать метод CG для больших матриц.
Для прямоугольных матриц мы можем использовать QR-разложение или SVD, но, опять же, я не знаю, как выбрать одну из них.
Для других матриц я сейчас не знаю, как выбрать подходящий решатель, например, эрмитовы / симметричные матрицы, разреженные матрицы, матричные полосы и т. Д.
источник
Ответы:
Ваш вопрос немного похож на вопрос о том, какую отвертку выбрать в зависимости от привода (слот, Phillips, Torx, ...). Помимо того, что их слишком много , выбор также зависит от того, хотите ли вы просто затянуть один винт или собрать целый набор библиотечных полок. Тем не менее, в частичном ответе на ваш вопрос, вот некоторые из вопросов, которые вы должны учитывать при выборе метода решения линейной системы . Я также ограничусь обратимыми матрицами; случаи переопределенных или недоопределенных систем - это другой вопрос, и на самом деле это должны быть отдельные вопросы.A x = b
Как вы правильно заметили, варианты 1 и 2 являются правильными: вычисление и применение обратной матрицы является чрезвычайно плохой идеей, поскольку она намного дороже и часто численно менее устойчива, чем применение одного из других алгоритмов. Это оставляет вам выбор между прямыми и итеративными методами. Первое , что нужно учитывать не матрица , но то , что вы ожидаете от численного решения ~ х :A Икс~
Поскольку не существует такого понятия, как бесплатный обед, вам обычно приходится выбирать компромисс между ними. После этого вы начинаете смотреть на матрицу (и ваше оборудование), чтобы выбрать хороший метод (или, скорее, метод, для которого вы можете найти хорошую реализацию). (Обратите внимание, как я избегал писать «лучше» здесь ...) Наиболее важные свойства здесьA
Имея это в виду, вам придется просмотреть (огромную) литературу и оценить различные методы, которые вы найдете для вашей конкретной проблемы. Вот некоторые общие замечания:
Это также справедливо для (больших) разреженных матриц, если у вас нет проблем с памятью: разреженные матрицы в общем случае не имеют разреженного разложения LU, и если факторы не помещаются в (быструю) память, эти методы становятся непригодными для использования.
Если вам неоднократно нужно решать линейные системы с одной и той же матрицей и разными правыми частями, прямые методы все равно могут быть быстрее, чем итерационные методы, поскольку вам нужно вычислить разложение только один раз. (Это предполагает последовательное решение; если у вас есть все правые стороны одновременно, вы можете использовать блочные методы Крылова.)
Конечно, это только очень грубые рекомендации: для любого из приведенных выше утверждений, вероятно, существует матрица, для которой верно обратное ...
Поскольку вы просили ссылки в комментариях, вот несколько учебников и обзорных статей, чтобы вы могли начать. (Ни один из них - ни набор - не является исчерпывающим; этот вопрос слишком широк и слишком сильно зависит от вашей конкретной проблемы.)
источник
Дерево решений в Разделе 4 соответствующей главы в Руководстве по библиотеке NAG (частично) отвечает на некоторые ваши вопросы.
источник
Документация Eigen Library также имеет хорошую обзорную страницу с большим количеством информации о различных разложениях матриц:
http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html
источник