Мой текущий программный проект включает реализацию числового метода для решения линейных систем с помощью Python (так называемый SOR
-Method).
Это в основном работает так:
Дана линейная система:
ax1 + bx2 + cx3 = b1
dx1 + ex2 + fx3 = b2
gx1 + hx2 + ix3 = b3
Переставить уравнения в:
x1_new = (b1 - (bx2 + cx3)) / a
x2_new = (b2 - (dx1_new + fx3)) / e
x3_new = (b3 - (gx1_new + hx2_new)) / i
Как видите, значения x*_new
обновляются с каждой строкой - это печальная причина, по которой я не могу использовать простые векторно-векторные результаты (я также должен делить на диагональный элемент - а не умножать его). Я должен идти элемент за элементом.
Я бы хотел работать с sparse
-Матрицами. Но я еще не нашел способ, как проиндексировать разреженную матрицу и как выполнить операцию, описанную выше? Мол, единственное, что я нашел (относительно этого https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html), это использовать A[i].data
, который возвращает ненулевые элементы строки i
. Но в строке может быть много нулей. А также работа с большим количеством if / else для получения элемента по индексу не очень эффективна с 100.000 x 100.000
матрицей.
Есть идеи?