Skip to main content
 首页 » 编程设计

python之如何用python计算极导数

2025年05月04日12shangdawei

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

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

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

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

dr, dt = nablaPolar(data, centerpoint)?

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

请您参考如下方法:

径向 (r) 和切向 (t) 导数是极坐标中梯度的分量:

∇f = (df/dr, 1/r df/dt)

由于您的数据存储在笛卡尔数组中,因此您需要将其表示为笛卡尔导数:

博士 = df/博士

= (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