zhukov000

Лаба

Nov 11th, 2021
758
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. # исходная функция
  2. f = lambda x,y: x * x + 2 * y * y + 2 * x - 4 * y + 1
  3. # производная по x
  4. fdx = lambda x,y: 2 * x + 2
  5. # производная по y
  6. fdy = lambda x,y: 4 * y - 4
  7.  
  8.  
  9. def calc1(x, y, eps):
  10.     """
  11.    Метод спуска
  12.    :param x: начальное приближение по x
  13.    :param y: начальное приближение по y
  14.    :param eps: точноть
  15.    """
  16.     print("Метод спуска")
  17.     dx, dy = fdx(x, y), fdy(x, y)
  18.     i = 0 # номер итерации
  19.     while max(abs(dx), abs(dy)) >= eps:
  20.         k = ((2 * x + 2) * dx + (4 * y - 4) * dy) / (2 * (dx ** 2 + 2 * dy ** 2))
  21.         x, y = x - k * dx, y - k * dy   # новое приблежение
  22.         i += 1
  23.         print('Итерация {:d}, значения x = {:.4f}, y = {:.4f}'.format(i, x, y))
  24.         dx, dy = fdx(x, y), fdy(x, y)
  25.  
  26.  
  27. def calc2(x, y, eps):
  28.     """
  29.    Метод сопряженных градиентов
  30.    :param x: начальное приближение по x
  31.    :param y: начальное приближение по y
  32.    :param eps: точноть
  33.    """
  34.     print("Метод сопряженных градиентов")
  35.     s = [(fdx(x, y), fdy(x, y))]
  36.     i = 0  # номер итерации
  37.     print('Итерация {:d}, значения x = {:.4f}, y = {:.4f}, s = ({:.4f}, {:.4f})'.format(i, x, y, s[-1][0], s[-1][1]))
  38.     while max(map(abs, s[-1])) >= eps:
  39.         dx, dy = s[-1]  # dx[k-1]
  40.         k = ((2 * x + 2) * dx + (4 * y - 4) * dy) / (2 * (dx ** 2 + 2 * dy ** 2))
  41.         x, y = x - k * dx, y - k * dy  # новое приблежение
  42.         i += 1
  43.         w = (fdx(x, y) ** 2 + fdy(x, y) ** 2) / (dx ** 2 + dy ** 2)
  44.         s.append((-fdx(x, y) + w * dx, -fdy(x, y) + w * dy))
  45.         print('Итерация {:d}, значения x = {:.4f}, y = {:.4f}, w = {:.4f}, s = ({:.4f}, {:.4f})'.format(i, x, y, w,
  46.                                                                                                         s[-1][0],
  47.                                                                                                         s[-1][1]))
  48. eps = 0.01
  49. x0, y0 = -0.9, 0.9
  50. calc1(x0, y0, eps)
  51. calc2(x0, y0, eps)
  52.  
Advertisement
Add Comment
Please, Sign In to add comment