如何用python计算极性导数?

时间:2013-09-17 09:27:40

标签: python math numpy polar-coordinates

我有笛卡尔数据的二维数组z = f(x,y)。如果我想要x方向的数值导数(使用Python的numpy数组)

lag = 10
dx = (data[lag:,:] - data[:-lag,:])/float(lag)

现在,使用相同的数据,我有一个中心点,我希望导数朝向这一点,即径向导数dr。并且我还想要相应的垂直分量,即切向导数dt。

是否存在执行此操作的函数/库/代码块?喜欢

dr, dt = nablaPolar(data, centerpoint)?

请注意,数学必须正确(滞后参数取决于到原点的距离)。

1 个答案:

答案 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