Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import random
- print('Система находит решение системы Ax = b методом Гаусса-Жордано')
- print('Введите размерность системы')
- n = int(input())
- M = [[0.0] * (n + 1) for _ in range(n)]
- MM = [[0.0] * (n + 1) for _ in range(n)]
- print('Введите 0/1 - задать систему случайным образом или вручную')
- det = 1
- m = 0
- if input() == '1':
- for i in range(n):
- for j in range(n + 1):
- MM[i][j] = random() - 0.5
- else:
- for i in range(n):
- while True:
- print('Введите %d столбец' % i)
- try:
- MM[i] = list(map(float, input().split()))
- print(MM[i], len(MM[i]), n+1)
- if len(MM[i]) != n + 1:
- continue
- else:
- break
- except Exception:
- continue
- print('Введённая матрица')
- for i in range(n):
- for j in range(n + 1):
- print(MM[i][j], end=' ')
- M[i][j] = MM[i][j]
- print()
- def b_ax():
- for i in range(n):
- for j in range(n):
- MM[i][n] -= MM[i][j] * M[j][n]
- def select_a_max(k):
- global det
- global m
- k_max, k1 = k, k + 1
- a_max = abs(M[k][k])
- if k < n - 1:
- for i in range(k1, n):
- a_mod = abs(M[i][k])
- if a_mod > a_max:
- a_max = a_mod
- k_max = i
- if a_max < 1e-10:
- det = 0
- return
- if k_max != k:
- for j in range(k, n + 1):
- buff = M[k][j]
- M[k][j] = M[k_max][j]
- M[k_max][j] = buff
- det *= -1
- m += 1
- det = det * M[k][k]
- def method_g_j():
- global det
- global m
- m = 0
- det = 1
- print(det)
- for k in range(n):
- select_a_max(k)
- if abs(det) < 1e-10:
- return
- for j in range(n, k - 1, -1):
- M[k][j] /= M[k][k]
- buff = M[k][k]
- for j in range(k, n + 1):
- M[k][j] /= buff
- for i in range(n):
- if i != k:
- for j in range(n, k - 1, -1):
- M[i][j] -= M[i][k] * M[k][j]
- print('Система преобразована к виду')
- for i in range(n):
- for j in range(n):
- print(M[i][j], end=' ')
- print('%.3f' % M[i][n])
- method_g_j()
- print('Определитель матрицы системы %.15f' % det)
- if abs(det) < 1e-10:
- print('Матрица вырожденная!!!')
- else:
- print('Решение системы')
- for i in range(n):
- print('%.5f' % M[i][n], end=' ')
- print()
- print('Число переставленных строк - %d' % m)
- b_ax()
- print('Невязка для полученного решения')
- for i in range(n):
- print('%.5f' % MM[i][n], end=' ')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement