Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import matplotlib.pyplot as plt
- def sum_aij(x=[]): # k-степень от 1 до 9 включительно
- sum = []
- for i in range(9+1):
- sum.append([])
- for j in range(9+1):
- a = 0
- for k in range(20):
- a += x[k]**(i+j)
- sum[i].append(a)
- return sum
- def sum_b(x=[], y=[]):
- b = []
- for i in range(9+1):
- sum = 0
- for k in range(20):
- sum += x[k]**i * y[k]
- b.append(sum)
- return b
- def diagonal(a=[], b=[]):
- tmp = 0
- for i in range(9+1):
- if a[i][i] == 0:
- for j in range(9+1):
- if j == i:
- continue
- if (a[j][i] != 0) and (a[i][j] != 0):
- for k in range(9+1):
- tmp = a[j][k]
- a[j][k] = a[i][k]
- a[i][k] = tmp
- tmp = b[j]
- b[j] = b[i]
- b[i] = tmp
- break
- return a
- def function(x, a=[]):
- sum = 0
- for i in range(9+1):
- sum += a[i]*x**i
- return sum
- lst_x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
- lst_y = [5, 6, 8, 10, 12, 13, 12, 10, 8, 10, 8, 11, 7, 9, 11, 10, 9, 12, 11, 6]
- aij = []
- aij = sum_aij(lst_x)
- b = sum_b(lst_x, lst_y)
- aij = diagonal(sum_aij(lst_x), sum_b(lst_x, lst_y))
- for k in range(9+1):
- for i in range(k+1, 9+1):
- if aij[k][k] == 0:
- print("Solution isn't exist")
- M = aij[i][k]/aij[k][k]
- for j in range(k, 9+1):
- aij[i][j] -= M * aij[k][j]
- b[i] -= M * b[k]
- i = 9
- a = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- while i >= 0:
- i -= 1
- s = 0
- for j in range(i, 9+1):
- s += aij[i][j] * a[j]
- a[i] = (b[i] - s) / aij[i][i]
- for i in range(9+1):
- print(a[i])
- x = 1
- lst_x_a = []
- lst_y_a = []
- while x < 20:
- lst_x_a.append(x)
- lst_y_a.append(function(x, a))
- x += 0.5
- lst_x_a.append(20)
- lst_y_a.append(function(20, a))
- plt.plot(lst_x, lst_y, lst_x_a, lst_y_a)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement