Библиотека Python для итеративного решателя Гаусса-Зейделя?

Существует ли библиотека линейной алгебры, которая реализует итеративный алгоритм Гаусса-Зейделя для решения линейных систем? Или, может быть, предварительно подготовленный градиентный решатель?

Спасибо

РЕДАКТИРОВАТЬ: В конце концов, я использовал грубый, но правильный способ решить эту проблему. Поскольку мне все равно нужно было создать матрицу A (для Ax=b), я разделил матрицу как

A = M - N

с участием

 M = (D + L) and N = -U

где D — диагональ, L — нижнее треугольное сечение, U — верхнее треугольное сечение. потом

Pinv = scipy.linalg.inv(M)
x_k_1 = np.dot(Pinv,np.dot(N,x_k)) + np.dot(Pinv,b)

Также сделал некоторые тесты сходимости. Оно работает.


person Ivan    schedule 11.04.2011    source источник


Ответы (2)


Я знаю, что это старо, но я не нашел какой-либо существующей библиотеки в python для gauss-seidel. Вместо этого я создал свою маленькую функцию, которая с помощью матрицы перестановок, как показано в другом моем ответе матрица перестановки создаст решение (вектор x) для любой квадратной матрицы, в том числе с нулями по диагонали.

def gauss_seidel(A, b, tolerance, max_iterations, x):
#x is the initial condition


iter1 = 0
#Iterate
for k in range(max_iterations):
    iter1 = iter1 + 1
    print ("The solution vector in iteration", iter1, "is:", x)    
    x_old  = x.copy()
    
    #Loop over rows
    for i in range(A.shape[0]):
        x[i] = (b[i] - np.dot(A[i,:i], x[:i]) - np.dot(A[i,(i+1):], x_old[(i+1):])) / A[i ,i]
        
    #Stop condition 
    #LnormInf corresponds to the absolute value of the greatest element of the vector.
    
    LnormInf = max(abs((x - x_old)))/max(abs(x_old))   
    print ("The L infinity norm in iteration", iter1,"is:", LnormInf)
    if  LnormInf < tolerance:
        break

       
return x

После повторного поиска я нашел следующее, что можно было бы использовать в качестве готового пакета, но сам я его не использовал числовой PyPI

person user15410405    schedule 23.03.2021

person    schedule
comment
Я отформатировал ваш код для вас (используя кнопку {}). Пожалуйста, отредактируйте свой ответ, чтобы объяснить, откуда взялось sage.all и почему вы его использовали. - person Johnsyweb; 23.05.2011
comment
sage — это общенаучный пакет: sagemath.org. Спасибо за ответ. - person Ivan; 31.05.2011