梯度(2d)搜索函数returns None。问题是什么?
The gradient (2d) search function returns None. What is the problem?
我有一个函数应该 return 渐变。
def numerical_derivative_2d(func, epsilon):
def grad_func(x):
grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
return grad_func
但是在计算特定点的梯度时,我得到None。
t1 = lambda x: (
-1 / ((x[0] - 1)**2 + (x[1] - 1.5)**2 + 1)
* np.cos(2 * (x[0] - 1)**2 + 2 * (x[1] - 1.5)**2))
t2 = numerical_derivative_2d(t, 0.1)
t3 = t2([3, 4])
对象类:t1-function,t2-function,t3-None(我想得到一个二维点)
请告诉我如何更改此行
grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
让它发挥作用?
PS。我知道有计算梯度的内置方法。但这是其中一门课程的家庭作业。想了解错误,按模板做。
PPS.This 可能是不必要的,但我将给出一个按我预期工作的单个变量函数的任务示例。
def numerical_derivative_1d(func, epsilon):
def deriv_func(x):
return (func(x + epsilon) - func(x)) / epsilon
return deriv_func
def polynom_to_prime(x):
return 20 * x**5 + x**3 - 5 * x**2 + 2 * x + 2.0
t2 = numerical_derivative_1d(polynom_to_prime, 1e-5)
t3 = t2(3)
并且 t3 是一个数字(点),而不是 None
在 def grad_func(x)
中,你什么都不 return。在该函数内部,grad_func
是一个局部变量。考虑这样写:
def numerical_derivative_2d(func, epsilon):
def grad_func(x):
return (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
return grad_func
我有一个函数应该 return 渐变。
def numerical_derivative_2d(func, epsilon):
def grad_func(x):
grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
return grad_func
但是在计算特定点的梯度时,我得到None。
t1 = lambda x: (
-1 / ((x[0] - 1)**2 + (x[1] - 1.5)**2 + 1)
* np.cos(2 * (x[0] - 1)**2 + 2 * (x[1] - 1.5)**2))
t2 = numerical_derivative_2d(t, 0.1)
t3 = t2([3, 4])
对象类:t1-function,t2-function,t3-None(我想得到一个二维点)
请告诉我如何更改此行
grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
让它发挥作用?
PS。我知道有计算梯度的内置方法。但这是其中一门课程的家庭作业。想了解错误,按模板做。
PPS.This 可能是不必要的,但我将给出一个按我预期工作的单个变量函数的任务示例。
def numerical_derivative_1d(func, epsilon):
def deriv_func(x):
return (func(x + epsilon) - func(x)) / epsilon
return deriv_func
def polynom_to_prime(x):
return 20 * x**5 + x**3 - 5 * x**2 + 2 * x + 2.0
t2 = numerical_derivative_1d(polynom_to_prime, 1e-5)
t3 = t2(3)
并且 t3 是一个数字(点),而不是 None
在 def grad_func(x)
中,你什么都不 return。在该函数内部,grad_func
是一个局部变量。考虑这样写:
def numerical_derivative_2d(func, epsilon):
def grad_func(x):
return (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
return grad_func