Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def main():
- #заполнение исходной матрицы
- n = int(input("Введите n: "))
- variant = 2
- v = []
- a = np.zeros((n, n))
- for i in range(n):
- for j in range(n):
- if i == j:
- a[i][j] = variant + i + j
- v.append(a[i][j])
- for i in range(n):
- for j in range(n):
- if i!=j:
- a[i][j] = a[i][i] / 100
- print("\nИсходная матрица А\n", a, sep='\n')
- b = a.dot(v)
- print("\nВектор слобец b\n", b, sep='\n')
- RMK = np.zeros((n, n+1))
- for i in range(n):
- for j in range(n):
- RMK[i][j] = a[i][j]
- RMK[i][n] = b[i]
- print("\nРасширенная матрица коэффициентов\n", RMK, sep='\n')
- #прямой ход
- for i in range(n):
- RMK = GetNormal(RMK, i)
- RMK = GetZeros(RMK, i)
- print("\nРасширенная матрица коэффициентов после прямого хода метода Гаусса \n", RMK, sep='\n')
- #обратный ход
- x = np.zeros(n)
- for i in range(n-1, -1, -1):
- x[i] = RMK[i][n] / RMK[i][i]
- for j in range(n-1, i, -1):
- x[i] -= RMK[i][j] * x[j] / RMK[i][i]
- print("\nВектор х\n", x, sep='\n')
- #проверка
- x_2 = np.linalg.solve(a, b)
- print("\nВектор х, найденный методом из либы np\n",
- x_2, sep='\n')
- print("\nПохоже, что мы справились, код неплох :)\n" if np.array_equal(x, x_2) else "\nЧто-то пошло не так, код ужасен\n")
- def GetNormal(a, i):
- for j in range(i, len(a)):
- a[j] /= a[i][i]
- return a
- def GetZeros(a, i):
- for k in range(i+1, len(a)):
- a[k] -= a[i] * a[k][i]
- return a
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement