Why AMNumDiff is not using State Jdiff?
Currently we have the following code:
def calcDiff(model,data,x,u):
xn0,c0 = model.calc(data,x,u)
h = model.disturbance
dist = lambda i,n,h: np.array([ h if ii==i else 0 for ii in range(n) ])
Xint = lambda x,dx: model.State.integrate(x,dx)
Xdiff = lambda x1,x2: model.State.diff(x1,x2)
for ix in range(model.ndx):
xn,c = model.model0.calc(data.datax[ix],Xint(x,dist(ix,model.ndx,h)),u)
data.Fx[:,ix] = Xdiff(xn0,xn)/h
data.Lx[ ix] = (c-c0)/h
if model.ncost>1: data.Rx[:,ix] = (data.datax[ix].costResiduals-data.data0.costResiduals)/h
for iu in range(model.nu):
xn,c = model.model0.calc(data.datau[iu],x,u+dist(iu,model.nu,h))
data.Fu[:,iu] = Xdiff(xn0,xn)/h
data.Lu[ iu] = (c-c0)/h
if model.ncost>1: data.Ru[:,iu] = (data.datau[iu].costResiduals-data.data0.costResiduals)/h
if model.withGaussApprox:
data.Lxx[:,:] = np.dot(data.Rx.T,data.Rx)
data.Lxu[:,:] = np.dot(data.Rx.T,data.Ru)
data.Lux[:,:] = data.Lxu.T
data.Luu[:,:] = np.dot(data.Ru.T,data.Ru)
however I believe it's needed the Jdiff for computing Fx, i.e.
Jdiff = lambda x1,x2: model.State.Jdiff(x1,x2,'second')
xdiff = Xdiff(xn-xn0)
data.Fx[:,ix] = Jdiff(xdiff)*xdiff/h
and I right? @nmansard