Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import math
- import pandas as pd
- eps=0.000001
- h=0.0001
- def f(x,y,z):
- return x**2+3*y**2+2*z**2
- def hiper():
- return (np.array([2,1,3]),1)
- def dFx(ar):
- x = ar[0]
- y = ar[1]
- z = ar[2]
- return (f(x+h,y,z)-f(x-h,y,z))/(2*h)
- def dFy(ar):
- x = ar[0]
- y = ar[1]
- z = ar[2]
- return (f(x,y+h,z)-f(x,y-h,z))/(2*h)
- def dFz(ar):
- x = ar[0]
- y = ar[1]
- z = ar[2]
- return (f(x,y,z+h)-f(x,y,z-h))/(2*h)
- def gradF(ar):
- return np.array([dFx(ar), dFy(ar),dFz(ar)], float)
- def prc(ar):
- p, b = hiper()
- return ar + (1./np.linalg.norm( (p)**2)*(b-p.dot(ar))*p
- def gradPrc(x,y,z):
- xyz = np.array([x,y,z], float)
- alpha = 1.0
- i=1
- while True:
- xyzk = prc(xyz - alpha*gradF(xyz))
- gr = gradF(xyz)
- if np.linalg.norm(xyz-xyzk)<eps
- break
- elif f(xyzk) <= f(xyz) :
- xyz = np.copy(xyzk)
- alpha = 1.0
- else:
- while(f(xyzk) > f(xyz)):
- alpha = alpha*0.5
- xyzk = prc(xyz - alpha*gradF(xyz))
- return xyk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement