Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. from sympy import *
  2.  
  3. x, y = var('x, y')
  4.  
  5. vars = [x, y]
  6. u0 = Matrix([-0.2, 0.1])
  7. f = Lambda(vars, E**(-x**2 - y**2) * (2 * x**2 + 3 * x**2))
  8. # f = Lambda(vars, (x - 2)**4 + (y - 3)**4)
  9. # f = Lambda(vars, 100 * (y - x**2)**2 + (1 - x)**2)
  10.  
  11. H = Matrix([[f(*vars).diff(x1, x2) for x1 in vars] for x2 in vars])
  12. G = Matrix([f(*vars).diff(x) for x in vars])
  13.  
  14. def newton(x0, f, H, G, eps):
  15. print("H = ", H)
  16. print("G = ", G)
  17. Hi = H.inv()
  18. steps = 0
  19. while True:
  20. d = dict(zip(vars, x0))
  21. x1 = x0 - Hi.subs(d) * G.subs(d)
  22. print(steps, f(*x1), x1)
  23. if (x0 - x1).norm() < eps:
  24. break
  25. x0 = x1
  26. steps += 1
  27.  
  28. newton(u0, f, H, G, 0.001)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement