Насколько мне известно, есть 4 способа решения системы линейных уравнений (поправьте меня, если их больше):
- Если системная матрица является квадратной матрицей полного ранга, вы можете использовать правило Крамера;
- Вычислить обратную или псевдообратную матрицу системы;
- Используйте методы матричного разложения (гауссово или гауссово-жордановое исключение рассматривается как разложение LU);
- Используйте итерационные методы, такие как метод сопряженных градиентов.
Фактически, вы почти никогда не хотите решать уравнения, используя правило Крамера или вычисляя обратное или псевдообратное, особенно для многомерных матриц, поэтому первый вопрос - когда использовать методы разложения и итерационные методы соответственно. Я думаю, это зависит от размера и свойств системной матрицы.
Второй вопрос, насколько вам известно, какие методы разложения или итерационные методы наиболее подходят для определенной системной матрицы с точки зрения численной стабильности и эффективности.
Например, метод сопряженных градиентов используется для решения уравнений, в которых матрица является симметричной и положительно определенной, хотя его также можно применять к любым линейным уравнениям путем преобразования в . Также для положительно определенной матрицы вы можете использовать метод разложения Холецкого для поиска решения. Но я не знаю, когда выбрать метод CG, а когда выбрать разложение Холецкого. Мне кажется, нам лучше использовать метод CG для больших матриц.
Для прямоугольных матриц мы можем использовать QR-разложение или SVD, но, опять же, я не знаю, как выбрать одну из них.
Для других матриц я сейчас не знаю, как выбрать подходящий решатель, например, эрмитовы / симметричные матрицы, разреженные матрицы, матричные полосы и т. Д.