我有笛卡尔数据的二维数组z = f(x,y)。如果我想要x方向的数值导数(使用Python的numpy数组)
lag = 10
dx = (data[lag:,:] - data[:-lag,:])/float(lag)
现在,使用相同的数据,我有一个中心点,我希望导数朝向这一点,即径向导数dr。并且我还想要相应的垂直分量,即切向导数dt。
是否存在执行此操作的函数/库/代码块?喜欢
dr, dt = nablaPolar(data, centerpoint)?
请注意,数学必须正确(滞后参数取决于到原点的距离)。
答案 0 :(得分:1)
径向(r)和切向(t)导数是极坐标中梯度的分量:
∇f=(df / dr,1 / r df / dt)
由于您的数据存储在笛卡尔数组中,您需要将其表示为笛卡尔导数:
dr = df / dr
=(df / dx)*(dx / dr)+(df / dy)/(dy / dr)
=(df / dx)/(2x)+(df / dy)/(2y)
和
dt =(1 / r)*(df / dt)
= [(df / dx)(dx / dt)+(df / dy)(dy / dt)] /(x ^ 2 + y ^ 2)
= [(df / dx)(x ^ 2 + y ^ 2)/( - y)+(df / dx)(x ^ 2 + y ^ 2)/(x) ] /(x ^ 2 + y ^ 2)
=(df / dy)/ x - (df / dx)/ y
要在python中计算,
def nablaPolar(data, centerpoint, lag=10):
x, y = centerpoint
dfx = (data[x+lag][y] - data[x-lag][y])/float(lag)
dfy = (data[x][y+lag] - data[x][y-lag])/float(lag)
dr = dfx/(2*x) + dfy/(2*y)
dt = dfy/x - dfx/y
return dr, dt