Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python计算极导数?_Python_Math_Numpy_Polar Coordinates - Fatal编程技术网

如何使用python计算极导数?

如何使用python计算极导数?,python,math,numpy,polar-coordinates,Python,Math,Numpy,Polar Coordinates,我有笛卡尔数据z=f(x,y)的二维数组。如果我想要x方向的数值导数,我会(使用Python的numpy数组) 现在,使用相同的数据,我有一个中心点,我希望导数指向这一点,即径向导数dr,同时我希望得到相应的垂直分量,即切向导数dt 是否有函数/库/代码块可以执行此操作?像 dr,dt=nablaPolar(数据,中心点)? 请注意,数学必须正确(滞后参数取决于到原点的距离)。径向(r)和切向(t)导数是极坐标中梯度的分量: ∇f=(df/dr,1/r df/dt) 由于数据存储在笛卡尔数组中,

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

现在,使用相同的数据,我有一个中心点,我希望导数指向这一点,即径向导数dr,同时我希望得到相应的垂直分量,即切向导数dt

是否有函数/库/代码块可以执行此操作?像

dr,dt=nablaPolar(数据,中心点)?

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

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

谢谢你的回答。我想你必须修改一下这个。。。中心点与数据的索引相关。r依赖于x-x0和y-y0,其中x和y是阵列索引,x0和y0是中心点的坐标。类似于r^2=(x-x0)^2+(y-y0)^2。这会增加一些常数,对吗?如果中心位于(0,0),则上述操作有效。
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