我无法对以下函数进行二阶导数。当我想要关于 u_s 的二阶导数时,它可以工作,但对于 x_s 它不起作用。
有谁知道我在这里做错了什么?
def cost(xt, x_goal, u, Q, R):
return (xt - x_goal).matmul(Q).matmul((xt - x_goal).transpose(0,1)) + u.matmul(R).matmul(u)
x_s = tr.tensor([ 0.0000, -1.0000, 0.0000], dtype=torch.float64, requires_grad=True)
u_s = tr.tensor([-0.2749], dtype=torch.float64, requires_grad=True)
c = cost(x_s, x_Goal, u_s, tr.tensor(Q), tr.tensor(R))
c
output:
tensor([[4.0076]], dtype=torch.float64, grad_fn=<ThAddBackward>)
Cu = grad(c, u_s, create_graph=True)[0]
Cu
output:
tensor([-0.0550], dtype=torch.float64, grad_fn=<ThAddBackward>)
Cuu = grad(Cu, u_s, allow_unused=True)[0]
Cuu
output:
tensor([0.2000], dtype=torch.float64)
Cux = grad(Cu, x_s, allow_unused=True)
Cux
output:
(None,)
我猜 Cu 本身完全独立于 x_s,但是导数至少应该为零,而不是无!