Метод mldivide
, обычно представляемый как \
, допускает решение множества систем с одним и тем же A
одновременно.
x = A\[b1 b2 b3 b4] # where bi are vectors with n rows
Решает систему для каждого b
и возвращает матрицу nx4, где каждый столбец является решением каждого b
.Вызов mldivide, подобный этому, должен повысить эффективность, потому что декомпозиция выполняется только один раз.
Как и во многих разложениях, таких как LU o LDL '(и в той, которая вас интересует), матричное умножение x
имеет верхнюю диагональпервое решаемое значение - x(n)
.Однако, при необходимости выполнить декомпозицию LDL, простой алгоритм обратной замены не будет узким местом кода.Следовательно, разложение можно сохранить, чтобы избежать повторения расчета для каждого bi
.Таким образом, код будет выглядеть примерно так:
[LA,DA] = ldl(A);
DA = sparse(DA);
% LA = sparse(LA); %LA can also be converted to sparse matrix
% loop over bi
xi = LA'\(DA\(LA\bi));
% end loop
Как вы можете видеть в документации по mldivide ( Алгоритмы, раздел ), он выполняет некоторые проверки входных матриц и, имеяLA
определяется как полное, а DA
- как разреженное, оно должно напрямую указывать на треугольный решатель и трехдиагональный решатель.Если бы LA
был преобразован в разреженный, он также использовал бы треугольный решатель, и я не знаю, будет ли преобразование в разреженный представлять какое-либо улучшение.