Advertisement
Sephinroth

Gaussian elimination

Oct 21st, 2020
2,015
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.98 KB | None | 0 0
  1. import numpy as np
  2.  
  3. def main():
  4.     #заполнение исходной матрицы
  5.     n = int(input("Введите n: "))
  6.     variant = 2
  7.     v = []
  8.     a = np.zeros((n, n))
  9.     for i in range(n):
  10.         for j in range(n):
  11.             if i == j:
  12.                 a[i][j] = variant + i + j
  13.                 v.append(a[i][j])
  14.     for i in range(n):
  15.         for j in range(n):
  16.             if i!=j:
  17.                 a[i][j] = a[i][i] / 100
  18.     print("\nИсходная матрица А\n", a, sep='\n')
  19.  
  20.     b = a.dot(v)
  21.     print("\nВектор слобец b\n", b, sep='\n')  
  22.    
  23.     RMK = np.zeros((n, n+1))
  24.     for i in range(n):
  25.         for j in range(n):
  26.             RMK[i][j] = a[i][j]
  27.         RMK[i][n] = b[i]
  28.     print("\nРасширенная матрица коэффициентов\n", RMK, sep='\n')
  29.    
  30.     #прямой ход
  31.     for i in range(n):
  32.         RMK = GetNormal(RMK, i)
  33.         RMK = GetZeros(RMK, i)
  34.     print("\nРасширенная матрица коэффициентов после прямого хода метода Гаусса \n", RMK, sep='\n')
  35.    
  36.     #обратный ход
  37.     x = np.zeros(n)
  38.     for i in range(n-1, -1, -1):
  39.         x[i] = RMK[i][n] / RMK[i][i]
  40.         for j in range(n-1, i, -1):
  41.             x[i] -= RMK[i][j] * x[j] / RMK[i][i]        
  42.     print("\nВектор х\n", x, sep='\n')      
  43.    
  44.     #проверка
  45.     x_2 = np.linalg.solve(a, b)
  46.     print("\nВектор х, найденный методом из либы np\n",
  47.           x_2, sep='\n')
  48.    
  49.     print("\nПохоже, что мы справились, код неплох :)\n" if np.array_equal(x, x_2) else "\nЧто-то пошло не так, код ужасен\n")
  50.    
  51. def GetNormal(a, i):
  52.     for j in range(i, len(a)):
  53.         a[j] /= a[i][i]
  54.     return a
  55.  
  56. def GetZeros(a, i):
  57.     for k in range(i+1, len(a)):
  58.         a[k] -= a[i] * a[k][i]
  59.     return a
  60.      
  61. if __name__ == "__main__":
  62.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement