python中的数值导数

python中的数值导数,python,numerical-methods,derivative,Python,Numerical Methods,Derivative,我在计算两个变量函数的导数时遇到困难。 其功能是: (Z1_i-Z1_(i-1))^2+(Z2_i-Z2_(i-1))^2-L^2 $L$是维度向量($z1_i$和$z2_i$)=11,配置是起点和终点的配置,代码如下: def con(zz,L,config): #zz=[z^1_1,z^2_1,z^3…..z^N_1,z^1_2,z^2_2,….z^N_2] nL=len(L) res=np.0(nL) zzM=np.0((2,nL+1)) zzM[:,0]=config['a'] zzM[

我在计算两个变量函数的导数时遇到困难。 其功能是: (Z1_i-Z1_(i-1))^2+(Z2_i-Z2_(i-1))^2-L^2

$L$是维度向量($z1_i$和$z2_i$)=11,配置是起点和终点的配置,代码如下:

def con(zz,L,config):
#zz=[z^1_1,z^2_1,z^3…..z^N_1,z^1_2,z^2_2,….z^N_2]
nL=len(L)
res=np.0(nL)
zzM=np.0((2,nL+1))
zzM[:,0]=config['a']
zzM[:,1:-1]=zz.重塑(2,-1)
zzM[:,-1]=配置['b']
对于枚举中的i,l(l['l']):
res[i]=和((zzM[:,i+1]-zzM[:,i])**2)-l**2
返回res
遵循数值导数公式:

def numGrad(xx,f): n=len(xx) eps=1e-7 ngrad=np.ones((2,n)) 对于范围(n)中的i: xxz=xx.copy() xxz[i]+=eps ngrad[i]=(f(xxz)-f(xx))/eps 返回ngrad fc=λzz:con(zz,l1,config1) numGrad(zz,fc) 我得到了这个向量:

numGrad (zz, fc)
Oct [243]:
array ([0., 0., 0., 0., 0.,
        0., 0., 0., 0., -0.38851931,
        0.7123603])
我的问题是,知道$Z1_i$和$Z2_i$包含11个变量,这个函数的导数不是22个元素的向量吗?我做错了什么