我正尝试通过两种方式来计算函数在特定点处的梯度:一种是通过分析得出梯度并计算出梯度,另一种是使用af(x + h)-f(x)/ h估计。然后,我可以比较它们,看看哪个更有效。
我已经为两者编写了代码。我确定为第一种方法编写的代码可以正常工作。不幸的是,第二种方法的代码产生了错误的答案。
def cost_gradient_theta1(t,m,x,y):
c=cost(x,y,t,m)
grad=[0]*240
for i in range(240):
t1=t
t1[i]=t[i]+0.000001
grad[i]=(cost(x,y,t1,m)-c)/0.000001
return grad
在上面,cost是我之前定义的函数,x和y是常量(实际上是0和1s列表的列表),而t和m是我想区分的变量。它们旨在代表每个长度为240的浮标列表。
当我进行测试并将其与“真实”答案进行比较时,第0个坐标结果很好。但是从第一坐标开始,那些偏导数是错误的。
您发现上述代码有什么问题吗?