最初,我有两个数组p和角,并将它们插入方程fh中以得到第三个数组z。在得到这些数据后,我将数组p和角转换为p_perpendicular和p_parallel,其中p_perpendicular = p* sin(角)和p_parallel =p*cos(角)。
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(角度)的近似导数,但不知道如何找到dz/dp_平行或dz/dp_垂直的导数。
我的第一个想法是使用二维直方图,但这导致了很大的不准确。在p_parallel和p_perpendicular空间中,是否有最好的插值方法、极二值法或其他方法?


发布于 2022-04-29 18:18:07
你已经完成了变量变化。根据连锁规则:
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)https://stackoverflow.com/questions/72061173
复制相似问题