Advertisement
paster442

МНК

Apr 27th, 2023
1,027
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.40 KB | None | 0 0
  1. from math import sin, cos
  2. import numpy as np
  3.  
  4.  
  5. def f1(x):
  6.     return 1
  7.  
  8.  
  9. def f2(x):
  10.     return (x - 1) ** 2
  11.  
  12.  
  13. def f3(x):
  14.     return cos(2 * x)
  15.  
  16.  
  17. def f4(x):
  18.     return sin(3 * x)
  19.  
  20.  
  21. m = 4
  22. n = 4
  23.  
  24. points = [(0.67, 1.1), (1.4, 0.5), (2.9, 2.1), (3.3, 2.4)]
  25. a_ij = list()
  26.  
  27. for i in range(m):
  28.     for j in range(n):
  29.         if j == 0:
  30.             a_ij.append(f1(points[i][0]))
  31.         elif j == 1:
  32.             a_ij.append(f2(points[i][0]))
  33.         elif j == 2:
  34.             a_ij.append(f3(points[i][0]))
  35.         elif j == 3:
  36.             a_ij.append(f4(points[i][0]))
  37.  
  38. a_ij = np.array(a_ij).reshape((m, n))
  39.  
  40. a_jk_tilda = list()
  41. b_j = list()
  42.  
  43. for j in range(n):
  44.     for k in range(n):
  45.         tempsum = 0
  46.         for i in range(m):
  47.             tempsum += a_ij[i][j] * a_ij[i][k]
  48.         a_jk_tilda.append(tempsum * 2)
  49.  
  50. a_jk_tilda = np.array(a_jk_tilda).reshape((n, n))
  51.  
  52. for j in range(n):
  53.     tempsum = 0
  54.     for i in range(m):
  55.         tempsum += points[i][1] * a_ij[i][j]
  56.     b_j.append(tempsum * (-2))
  57.  
  58. matrix = list()
  59.  
  60. for j in range(n):
  61.     for k in range(n):
  62.         matrix.append(a_jk_tilda[j][k])
  63.     matrix.append(-b_j[j])
  64.  
  65. matrix = np.array(matrix).reshape((n, n + 1))
  66.  
  67. solutions = [0.913487, 0.215415, 0.402941, 80.0784007] # https://www.wolframalpha.com/input?i=8a%2B18.3378b%2B++2.2445+c%2B+0.4778+d%3D12.2%3B18.3378a%2B+82.1073+b%2B16.19522295c+-0.13586744d%3D+40.95358%3B+2.2445+a%2B16.1952b%2B+5.2543c%2B2.3611d%3D7.8413%3B0.4778a+-0.1358+b%2B+2.3611+c%2B+4.4554d%3D+++1.7079
  68.  
  69. sum1 = 0
  70. sum2 = 0
  71. sum3 = 0
  72. c = 0
  73.  
  74. for j in range(n):
  75.     sum1 += a_jk_tilda[j][j] * (solutions[j]) ** 2
  76.  
  77. for j in range(n):
  78.     for k in range(n):
  79.         if j < k:
  80.             sum2 += a_jk_tilda[j][k] * solutions[j] * solutions[k]
  81.  
  82. for j in range(n):
  83.     sum3 += b_j[j] * solutions[j]
  84.  
  85. for i in range(m):
  86.     c += points[i][1] ** 2
  87.  
  88. d = 0.5 * (0.5 * sum1 + sum2) + sum3 + c
  89.  
  90. print("Матрица коэффициентов a_{ij}:")
  91. print(a_ij)
  92.  
  93. print()
  94.  
  95. print("Матрица коэффициентов ~a_{jk}:")
  96. print(a_jk_tilda)
  97.  
  98. print()
  99.  
  100. print("Коэффициенты b_j:")
  101. print(b_j)
  102.  
  103. print()
  104.  
  105. print("СЛАУ, решением которой являются искомые коэффициенты линейной комбинации:")
  106. print(matrix)
  107.  
  108. print()
  109.  
  110. print("Минимальное значение D функции ошибки:")
  111. print(d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement