Advertisement
999ms

Untitled

Mar 5th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.96 KB | None | 0 0
  1. from random import random
  2.  
  3. print('Система находит решение системы Ax = b методом Гаусса-Жордано')
  4. print('Введите размерность системы')
  5. n = int(input())
  6. M = [[0.0] * (n + 1) for _ in range(n)]
  7. MM = [[0.0] * (n + 1) for _ in range(n)]
  8. print('Введите 0/1 - задать систему случайным образом или вручную')
  9. det = 1
  10. m = 0
  11. if input() == '1':
  12.     for i in range(n):
  13.         for j in range(n + 1):
  14.             MM[i][j] = random() - 0.5
  15. else:
  16.     for i in range(n):
  17.         while True:
  18.             print('Введите %d столбец' % i)
  19.             try:
  20.                 MM[i] = list(map(float, input().split()))
  21.                 print(MM[i], len(MM[i]), n+1)
  22.                 if len(MM[i]) != n + 1:
  23.                     continue
  24.                 else:
  25.                     break
  26.             except Exception:
  27.                 continue
  28.  
  29. print('Введённая матрица')
  30.  
  31. for i in range(n):
  32.     for j in range(n + 1):
  33.         print(MM[i][j], end=' ')
  34.         M[i][j] = MM[i][j]
  35.     print()
  36.  
  37.  
  38. def b_ax():
  39.     for i in range(n):
  40.         for j in range(n):
  41.             MM[i][n] -= MM[i][j] * M[j][n]
  42.  
  43.  
  44. def select_a_max(k):
  45.     global det
  46.     global m
  47.     k_max, k1 = k, k + 1
  48.     a_max = abs(M[k][k])
  49.     if k < n - 1:
  50.         for i in range(k1, n):
  51.             a_mod = abs(M[i][k])
  52.             if a_mod > a_max:
  53.                 a_max = a_mod
  54.                 k_max = i
  55.     if a_max < 1e-10:
  56.         det = 0
  57.         return
  58.     if k_max != k:
  59.         for j in range(k, n + 1):
  60.             buff = M[k][j]
  61.             M[k][j] = M[k_max][j]
  62.             M[k_max][j] = buff
  63.         det *= -1
  64.         m += 1
  65.     det = det * M[k][k]
  66.  
  67.  
  68. def method_g_j():
  69.     global det
  70.     global m
  71.     m = 0
  72.     det = 1
  73.     print(det)
  74.     for k in range(n):
  75.         select_a_max(k)
  76.         if abs(det) < 1e-10:
  77.             return
  78.         for j in range(n, k - 1, -1):
  79.             M[k][j] /= M[k][k]
  80.  
  81.         buff = M[k][k]
  82.  
  83.         for j in range(k, n + 1):
  84.             M[k][j] /= buff
  85.  
  86.         for i in range(n):
  87.             if i != k:
  88.                 for j in range(n, k - 1, -1):
  89.                     M[i][j] -= M[i][k] * M[k][j]
  90.     print('Система преобразована к виду')
  91.     for i in range(n):
  92.         for j in range(n):
  93.             print(M[i][j], end=' ')
  94.         print('%.3f' % M[i][n])
  95.  
  96.  
  97. method_g_j()
  98.  
  99. print('Определитель матрицы системы %.15f' % det)
  100. if abs(det) < 1e-10:
  101.     print('Матрица вырожденная!!!')
  102. else:
  103.     print('Решение системы')
  104.     for i in range(n):
  105.         print('%.5f' % M[i][n], end=' ')
  106.     print()
  107.     print('Число переставленных строк - %d' % m)
  108.     b_ax()
  109.     print('Невязка для полученного решения')
  110.     for i in range(n):
  111.         print('%.5f' % MM[i][n], end=' ')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement