Guest User

Untitled

a guest
Jul 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1.  
  2. from __future__ import division
  3.  
  4. def pderiv(f, i):
  5. e = 1e-10
  6. init_h = 0.1
  7.  
  8. def deriv_exp(arg, h):
  9. return(f(*arg_h(arg, h)) - f(*arg)) / h
  10.  
  11. def arg_h(arg, h):
  12. larg = list(arg)
  13. return tuple(larg[:i] +
  14. [larg[i] + h] +
  15. larg[i+1:])
  16.  
  17. def deriv_rec(arg, h, old_val):
  18. val = deriv_exp(arg, h)
  19. if abs(val - old_val) < e:
  20. return val
  21. else:
  22. return deriv_rec(arg, h/2, val)
  23.  
  24. def pderiv_f(*arg):
  25. return deriv_rec(arg, init_h/2,
  26. deriv_exp(arg, init_h))
  27.  
  28. return pderiv_f
  29.  
  30. def grad(f):
  31. def grad_f(*arg):
  32. return tuple(pderiv(f, i)(*arg)
  33. for i in xrange(len(arg)))
  34. return grad_f
  35.  
  36. if __name__ == '__main__':
  37. def f(x, y, z): return x + y**2 + z**3
  38. grad_f = grad(f)
  39.  
  40. print "f(x, y, z) = x + y**2 + z**3"
  41. print "grad_f(0, 0, 0) = " + str(grad_f(0, 0, 0))
  42. print "grad_f(1, 1, 1) = " + str(grad_f(1, 1, 1))
  43. print "grad_f(1, 2, 3) = " + str(grad_f(1, 2, 3))
Add Comment
Please, Sign In to add comment