allekco

lab4(CM) ver 2.0 (без лишних деталей)

Nov 22nd, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.13 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2.  
  3.  
  4. def sum_aij(x=[]):   # k-степень от 1 до 9 включительно
  5.     sum = []         # считаем коэффициенты матрицы
  6.     for i in range(9):
  7.         sum.append([])
  8.         for j in range(9):
  9.             a = 0
  10.             for k in range(20):     # просматриваем все 20 точек
  11.                 a += x[k]**(i+j)
  12.             sum[i].append(a)
  13.  
  14.     return sum
  15.  
  16.  
  17. def sum_b(x=[], y=[]):      # считаем свободные члены нашей матрицы
  18.     b = []
  19.     for i in range(9):
  20.         sum = 0
  21.         for k in range(20):
  22.             sum += x[k]**i * y[k]
  23.         b.append(sum)
  24.     return b
  25.  
  26.  
  27. def function(x, a=[]):      # апроксимирующий полином
  28.     sum = 0
  29.     for i in range(9):
  30.         sum += a[i]*x**i
  31.     return sum
  32.  
  33.  
  34. lst_x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  35. lst_y = [5, 6, 8, 10, 12, 13, 12, 10, 8, 10, 8, 11, 7, 9, 11, 10, 9, 12, 11, 6]
  36. aij = sum_aij(lst_x)
  37. b = sum_b(lst_x, lst_y)
  38.  
  39. for k in range(9):        # приведение к треугольному виду
  40.     for i in range(k+1, 9):
  41.         M = aij[i][k]/aij[k][k]
  42.         for j in range(k, 9):
  43.             aij[i][j] -= M * aij[k][j]
  44.         b[i] -= M * b[k]
  45.  
  46. i = 9
  47. a = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  48. while i >= 0:       # считаем ai их 9 штук
  49.     i -= 1
  50.     s = 0
  51.     for j in range(i, 9):     # в первой итерации этот цикл не выполняется, потому что мы сразу может найти a9
  52.         s += aij[i][j] * a[j]       # далее находим ai через известное предыдущее (a8 находим, зная а9)
  53.     a[i] = (b[i] - s) / aij[i][i]
  54.  
  55. for i in range(9):        # вывод коэффициентов итогового полинома
  56.     print(a[i])
  57.  
  58. x = 1
  59. lst_x_a = []
  60. lst_y_a = []
  61. while x < 20:
  62.     lst_x_a.append(x)
  63.     lst_y_a.append(function(x, a))
  64.     x += 0.5
  65. lst_x_a.append(20)
  66. lst_y_a.append(function(20, a))
  67.  
  68. plt.plot(lst_x, lst_y, lst_x_a, lst_y_a)
  69. plt.show()
Add Comment
Please, Sign In to add comment