Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- N = 2
- A = np.array([[4, 1, 1], [1, 6 + 0.2 * N, -1], [1, -1, 8 + 0.2 * N]])
- b = np.array([1, -2, 3])
- def func(x):
- return (1 / 2 * x.T @ A @ x + b.T @ x)
- def grad(x):
- return (A @ x + b)
- def mngs(eps):
- """
- this method should numerically find min(y),
- where y = 1/2*x.T*A*x + b.T*x
- :param A: matrix NxN
- :param b: matrix Nx1
- :param x_k: matrix Nx1
- :param eps: accuracy = 10^(-6))
- """
- x_k = b
- while np.linalg.norm(A @ x_k + b) >= eps :
- q = grad(x_k)
- mu = -(np.dot(q.T, q)/np.dot(q.T, A @ q))
- x_k = x_k + mu*q
- return x_k, func(x_k)
- def mps(eps):
- """
- this method should numerically find min(y),
- where y = 1/2*x.T*A*x + b.T*x
- :param A: matrix NxN
- :param b: matrix Nx1
- :param x_k: matrix Nx1
- :param eps: accuracy = 10^(-6))
- """
- B = np.eye(3)
- x_k = b
- while np.linalg.norm(A @ x_k + b) > eps :
- for i in range(0, 3):
- q = B[i][:]
- mu = -(np.dot(q.T, q)/np.dot(q.T, A @ q))
- x_k = x_k + mu*q
- return x_k, func(x_k)
- print("Решение системы Ax=-b")
- print(np.linalg.solve(A, -b))
- print("Метод наискорейшего градиентного спуска")
- #print(mngs(0.000001))
- print("Метод покоординатного спуска")
- print(mps(0.01))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement