Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def f(x, y):
- return np.log(1 + 3 * (x ** 2) + 5 * (y ** 2) + np.cos(x - y))
- def dx(x, y):
- return (6 * x - np.sin(x - y)) / (
- 1 + np.cos(x - y) + 3 * (x ** 2) + 5 * (y ** 2)
- )
- def dy(x, y):
- return -(np.sin(y - x) - 10 * y) / (
- np.cos(y - x) + 5 * (y ** 2) + 3 * (x ** 2) + 1
- )
- def dxdx(x, y):
- return (
- (6 - np.cos(x - y)) * (np.cos(x - y) + 3 * (x ** 2) + 5 * (y ** 2) + 1)
- - ((6 * x - np.sin(x - y))) ** 2
- ) / (((np.cos(x - y) + 3 * (x ** 2) + 5 * (y ** 2) + 1)) ** 2)
- def dxdy(x, y):
- return (
- np.cos(y - x) * (np.cos(y - x) + 5 * (y ** 2) + 3 * (x ** 2) + 1)
- - (10 * y - np.sin(y - x)) * (np.sin(y - x) + 6 * x)
- ) / (((np.cos(y - x) + 5 * (y ** 2) + 3 * (x ** 2) + 1)) ** 2)
- def dydy(x, y):
- return (
- (10 - np.cos(y - x))
- * (np.cos(y - x) + 5 * (y ** 2) + 3 * (x ** 2) + 1)
- - ((10 * y - np.sin(y - x))) ** 2
- ) / (((np.cos(y - x) + 5 * (y ** 2) + 3 * (x ** 2) + 1)) ** 2)
- def phi_1(x, y):
- return -(dx(x, y) ** 2) - (dy(x, y) ** 2)
- def phi_2(x, y):
- return (
- dxdx(x, y) * (dx(x, y) ** 2)
- + 2 * dxdy(x, y) * dx(x, y) * dy(x, y)
- + dydy(x, y) * (dy(x, y) ** 2)
- )
- def grad(x, y):
- return max(dx(x, y), dy(x, y))
- if __name__ == "__main__":
- xk = 0.1
- yk = 0.1
- eps = 0.001
- gradient = np.inf
- c = 0
- #print(phi_1(xk, yk))
- #print(phi_2(xk, yk))
- while eps < abs(gradient):
- t = -(phi_1(xk, yk)) / phi_2(xk, yk)
- xk, yk = xk - t * dx(xk, yk), yk - t * dy(xk, yk)
- gradient = grad(xk, yk)
- c += 1
- print(
- f"iteration {c} | x: {round(xk, 6)}, y: {round(yk, 6)}, f(x,y)={f(xk, yk)} ,gradient: {gradient}"
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement