Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.39 KB | None | 0 0
  1. import numpy as np
  2.  
  3. N = 2
  4. A = np.array([[4, 1, 1], [1, 6 + 0.2 * N, -1], [1, -1, 8 + 0.2 * N]])
  5. b = np.array([1, -2, 3])
  6.  
  7. def func(x):
  8.     return (1 / 2 * x.T @ A @ x + b.T @ x)
  9. def grad(x):
  10.     return (A @ x + b)
  11.  
  12. def mngs(eps):
  13.     """
  14.    this method should numerically find min(y),
  15.    where y = 1/2*x.T*A*x + b.T*x
  16.    :param A: matrix NxN
  17.    :param b: matrix Nx1
  18.    :param x_k: matrix Nx1
  19.    :param eps: accuracy = 10^(-6))
  20.    """
  21.     x_k = b
  22.  
  23.     while np.linalg.norm(A @ x_k + b) >= eps :
  24.         q = grad(x_k)
  25.         mu = -(np.dot(q.T, q)/np.dot(q.T, A @ q))
  26.         x_k = x_k + mu*q
  27.  
  28.     return x_k, func(x_k)
  29.  
  30.  
  31. def mps(eps):
  32.     """
  33.    this method should numerically find min(y),
  34.    where y = 1/2*x.T*A*x + b.T*x
  35.    :param A: matrix NxN
  36.    :param b: matrix Nx1
  37.    :param x_k: matrix Nx1
  38.    :param eps: accuracy = 10^(-6))
  39.    """
  40.     B = np.eye(3)
  41.     x_k = b
  42.    
  43.     while np.linalg.norm(A @ x_k + b) > eps :
  44.         for i in range(0, 3):
  45.             q = B[i][:]
  46.             mu = -(np.dot(q.T, q)/np.dot(q.T, A @ q))
  47.             x_k = x_k + mu*q
  48.     return x_k, func(x_k)
  49.  
  50. print("Решение  системы Ax=-b")
  51. print(np.linalg.solve(A, -b))
  52.  
  53. print("Метод наискорейшего градиентного спуска")
  54. #print(mngs(0.000001))
  55. print("Метод покоординатного спуска")
  56. print(mps(0.01))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement