簡體   English   中英

數值計算非均勻二維數據的一階導數

[英]Numerically finding first derivative of non-uniform 2D data

我最初有 2 arrays p 和角度,並將它們代入方程 fh 以獲得第三個數組 z。 獲得這些數據后,我將 arrays p 和角度更改為 p_perpendicular 和 p_parallel,其中 p_perpendicular = p* sin(angle) 和 p_parallel = p*cos(angle)。

import numpy as np 
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from numpy import histogram2d

def func(p,alpha):
   fh = (1/((1+((p**(1/2))))**(3/2)))*(1-np.tanh((np.cos(alpha*np.pi/180))**(1/2))+(1+np.tanh(alpha)**(1/2)))
return (fh)

p=[]
angle=[]
z=[]
for p_loop in np.arange(1e-23,4e-22,1e-23): 
    for alpha in np.arange(1,90,3): 
        p.append(p_loop)
        angle.append(alpha)
        z.append(func(p_loop,alpha))

p_parallel = (np.array(p)*np.cos(np.array(angle)*np.pi/180))   #array of parallel p
p_perpendicular = (np.array(p)*np.sin(np.array(angle)*np.pi/180))  #array of perpendicular p

我知道我可以從初始數據中找到 dz/dp 和 dz/d(angle) 的近似導數,但我不確定如何找到 dz/dp_parallel 或 dz/dp_perpendicular 的導數。

我的第一個想法是使用 2d 直方圖進行分箱,但這會導致很大的不准確性。 是否有一些插值方法或極坐標合並方法或其他方法最好將數據放在 p_parallel 和 p_perpendicular 空間中? 在此處輸入圖像描述

在此處輸入圖像描述

您已經執行了變量更改 從鏈式法則:

  dz/dp = dz/dp_par dp_par/dp + dz/dp_perp dp_perp/dp
  dz/dangle = dz/dp_par dp_par/dangle + dz/dp_perp dp_perp/dangle

鑒於您的轉變:

# the Jacobian of polar coordinates with respect to cartesian
# both `p` and `angle` are numpy arrays
J = np.array(
    [
        [np.cos(angle * np.pi / 180), -np.pi * p * np.sin(angle * np.pi / 180) / 180],
        [np.sin(angle * np.pi / 180), np.pi * p * np.cos(angle * np.pi / 180) / 180],
    ]
)

# J.shape = (2, 2, 1170).
# Transpose it such that the longest dim is first
J = np.transpose(J, axes=(2, 0, 1))

dz = <<your approximation of derivative [dz/dp, dz/dangle]>>
# dz.shape = (1170, 2)

然后通過求解給出 dz/dp_par、dz/dp_perp 的近似值

np.linalg.solve(J, dz)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM