Для решения системы линейных уравнений
Ax=b
, в которой A - полосатая матрица, подобная
, имеющей 5 ненулевых диагоналей.
Но в отличие от полосовой матрицы, A имеет три ненулевые диагонали, смещения которых равны 0, -1 и 1, и две ненулевые диагонали со смещениями -m и m.
Iпопытался решить его напрямую с помощью
diagonals = [Ap, As, An, Aw, Ae]
A = diags(diagonals, [0, -1, 1, -m, m]).toarray()
x = linalg.solve(A, b)
Этот метод создал целое число A. Но запасные части A, так что этот метод потратил слишком много памяти, чтобы сохранить нулевые элементы.
Поэтому я попытался использовать solve_banded
A = np.zeros((2 * m + 1, len(initial)))
A[0] = Ae
A[m - 1] = An
A[m] = Ap
A[m + 1] = As
A[2 * m] = Aw
x = linalg.solve_banded((m, m), A, b)
Этот метод стоит меньше памяти, чем предыдущие, но он все равно потратил некоторое количество на (2m-4) нулевых векторов.Есть ли более разумные методы, которые используют только пять ненулевых векторов?