0

我正在尝试计算散射问题中的微分横截面(角度的函数和“阶”l)。我想对不同的 l 值执行此操作并绘制横截面。我认为贝塞尔函数的划分是问题,但我不知道如何解决。任何解决方案/提示?谢谢

这是我的代码:

import numpy as np
import scipy as sp
from scipy import special



def j_l(l,k):
    sp.special.spherical_jn(l, k)
    return np.ndarray
def j_l1(l,k):
    sp.special.spherical_jn(l, k, True)
    return np.ndarray
def n_l(l, k):
    sp.special.spherical_yn(l, k)
    return np.ndarray
def n_l1(l, k):
    sp.special.spherical_yn(l, k, True)
    return np.ndarray




def delta_l(k_1, k_2,r, l):
    np.arctan(np.divide(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*j_l(l,k_2)-k_2*r*j_l1(l,k_2)),(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*n_l(l,k_2)-k_2*r*n_l1(l,k_2)))

def dcross(l,t,k_2,k_1):
    (1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2






t=np.linspace(0, 10, 10000)
fig = plt.figure()




plt.plot(t,dcross(1,t,1,0.5))
fig.savefig('dcross.png')

plt.show() ```
4

1 回答 1

0

我的物理学有点生疏,所以我无法检查公式,但有两个问题:delta_l 中的括号错误(外部真除法)和贝塞尔函数及其导数的正确返回:

import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from scipy import special

def j_l(l,k):
    return sp.special.spherical_jn(l, k)
    #return np.ndarray

def j_l1(l,k):
    return sp.special.spherical_jn(l, k, True)
    #return np.ndarray

def n_l(l, k):
    return sp.special.spherical_yn(l, k)
    #return np.ndarray

def n_l1(l, k):
    return sp.special.spherical_yn(l, k, True)
    #return np.ndarray

def delta_l(k_1, k_2,r, l):
    return np.arctan(np.divide(k_1*np.divide(j_l1(l, k_1), j_l(l ,k_1))*j_l(l, k_2)-k_2*r*j_l1(l, k_2),
              (k_1*np.divide(j_l1(l,k_1), j_l(l,k_1))*n_l(l, k_2)-k_2*r*n_l1(l, k_2))))

def dcross(l,t,k_2,k_1):
    return (1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2


t=np.linspace(0, 10, 10000)
fig = plt.figure()

plt.plot(t,dcross(1,t,1,0.5))
#fig.savefig('dcross.png')

plt.show()

生产(如果这是您正在寻找的):

在此处输入图像描述

于 2020-12-07T17:41:03.283 回答