Метод Гаусса с выбором главного элемента для решения СЛАУ
×

Метод Гаусса с выбором главного элемента для решения СЛАУ

Варианты матриц 4*4 и 5*5:

Теоретическая часть:

Источник

Код:

#библиотека для работы с матрицами
import numpy

def Metod_Gaussa(arr, brr):
    for k in range(arr.shape[0] - 1):
        #поиск строки с максимальным элементом
        max_elem = 0
        str = 0
        for i in range (k, arr.shape[0]):
            if abs(arr[i,k]) > abs(max_elem):
                max_elem = arr[i,k]
                str = i
        #меняем местами строки квадратной матрицы
        change = numpy.repeat(arr[k], 1)
        arr[k], arr[str] = arr[str], change
        #меняем местами элементы вектора-столбца
        change = numpy.repeat(brr[k], 1)
        brr[k], brr[str] = brr[str], change
        #делим полученную строку на max_elem
        arr[k] = arr[k] / max_elem
        brr[k] = brr[k] / max_elem
        #домножаем строку на коэффициенты и вычитаем ее из остальных строк
        for i in range (k + 1, arr.shape[0]):
            factor = arr[i,k]
            arr[i] = arr[i] - arr[k] * factor
            brr[i] = brr[i] - brr[k] * factor

    #находим аргументы уравнений
    arg = [brr[brr.shape[0] - 1] / (arr[arr.shape[0] - 1, arr.shape[0] - 1])]
    for i in range(arr.shape[0] - 2, -1, -1):
        n = brr[i]
        for j in range(len(arg)):
            n = n - arg[j] * arr[i, arr.shape[0] - 1 - j]
        arg.append(n)

    #переворачиваем значения в списке
    otv = []
    for i in reversed(arg): otv.append(i)
    return otv

#задаем вещественные квадратные матрицы и векторы-столбцы
A = numpy.array([[1.,3,2,-1],[-1,-5,-5,-3],[4,0,0,0],[-1,-4,-4,1]])
a = numpy.array([-11.,9,-12,18])

B = numpy.array([[0.,-3,-2,-2,0],[1,-4,0,-4,-5],[2,2,1,4,-4],[2,-3,-1,-1,1],[4,-5,-3,-3,4]])
b = numpy.array([4.,-14,-13,-1,-1])

#вызов функции и вывод на экран
print(Metod_Gaussa(A,a))
print(" ")
print(Metod_Gaussa(B,b))