【问题标题】:How to calculate polar derivatives with python?如何用python计算极坐标导数?
【发布时间】:2013-09-17 09:27:39
【问题描述】:

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

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

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

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

dr, dt = nablaPolar(data, centerpoint)?

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

【问题讨论】:

    标签: python math numpy polar-coordinates


    【解决方案1】:

    径向 (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
    

    【讨论】:

    • 感谢您的回答。我认为您必须对此进行一些修改...中心点与数据的索引有关。 r 取决于 x- x0 和 y - y0,其中 x 和 y 是数组索引,x0 和 y0 是中心点的坐标。类似于 r^2 = (x-x0)^2 + (y-y0)^2。这增加了一些常数,对吧?如果中心位于 (0,0),则上述方法有效。
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 2021-11-18
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2023-01-05
    • 2022-01-14
    相关资源
    最近更新 更多