如何在Python中对函数进行数值集成?

如何在Python中对函数进行数值集成?,python,wolfram-mathematica,integral,Python,Wolfram Mathematica,Integral,我正试图编写一个包含一些集成的Python代码(基于Mathematica笔记本),但到目前为止我运气不佳。 我要计算的积分是: 在哪里, *用于Bjorken-Mtingwa束内散射计算 在Python中,我尝试的是: 将numpy导入为np 输入数学 从sympy导入符号 从scipy导入插值 导入scipy.integrate作为integrate 从scipy.integrate导入四元组 定义(Np、r、c、beta_rel、gamma_rel、emit_x、emit_y、Sigm

我正试图编写一个包含一些集成的Python代码(基于Mathematica笔记本),但到目前为止我运气不佳。
我要计算的积分是:

在哪里,

*用于Bjorken-Mtingwa束内散射计算

在Python中,我尝试的是:

将numpy导入为np
输入数学
从sympy导入符号
从scipy导入插值
导入scipy.integrate作为integrate
从scipy.integrate导入四元组
定义(Np、r、c、beta_rel、gamma_rel、emit_x、emit_y、Sigma_s、Sigma_M):
返回值(Np*r**2*c)/(64*Np.pi**2*贝塔系数**3*伽马系数**4*发射x*发射y*西格玛系数*西格玛系数)
def矩阵(M1、M2、M3):
返回[[M1[i,j]+M2[i,j]+M3[i,j],用于范围内的j(M1.形状[0]),用于范围内的i(M1.形状[1])]
#然后我通过将文件加载到数据帧并进行一些计算来初始化所有参数。为了简短起见,我将不包括这一部分的大部分内容。我没有复数。
gamma_rel=1.00451006711
贝塔系数=0.09465451392
βx=7.890105185
贝塔_y=13.61578059
Phi_x=-1.957881913
Phi_y=0.0
emx=2.95814809e-06
emy=2.95814809e-06
H_x=32.68714662287
H_y=0.0
bl=4.256474951
r0=2.16775224067e-17
Sigma_M=0.00118124786
II=np.标识(3)
ABM=AIT(Np、r0、c、β、γ、emx、emy、bl、西格玛)
Clog=13.53496204#使用函数计算库仑对数,但似乎正确,因此我将不包括计算。
Lp=(伽马相对**2/西格玛矩阵)*np.矩阵([[0,0,0],[0,1,0],[0,0,0])
Lx=(βx/emx)*np.矩阵([[1,-gamma_rel*Phi_x,0],-gamma_rel*Phi_x,gamma_rel**2*H_x/beta_x,0],[0,0,0]]
Ly=(βy/emy)*np.矩阵([[0,0,0],[0,gamma_rel**2*H_y/βy,-gamma_rel*Phi_y],[0,-gamma_rel*Phi_y,1]]
L=np.矩阵(矩阵sum(Lx,Ly,Lp))
Ix=integrate.quad(lambda x:(x**(1/2.0)*(np.trace(Lx)*np.trace(np.linalg.inv(L+x*II))-3*np.trace(np.matmul(Lx,np.linalg.inv(L+x*II))/np.linalg.det(L+x*II)**(1/2.0),np.inf)
Ixx=4*np.pi*ABP*Clog*Ix[0]
#对于其他2个积分也是如此。实际上,所有3个积分都是在一个双循环中计算的。
但是我从mathematica那里得到了不同的结果。我也尝试了
scipy.integrate.simps
,但也没有帮助

在Mathematica中,我只是将其与:

Ix = NIntegrate[Intx, {x, 0, inf}, MaxRecursion -> 100];
Intx是照片的积分,之前也做过同样的程序


对于如何有效地集成此功能,是否有任何建议?我的方法有问题吗

如果没有更多的细节(例如WL代码),我不可能不说。我已经添加了我认为需要的代码。我希望这有帮助。您在哪里定义身份矩阵
II
?结果是与mathematica大不相同还是略有不同?只是添加了
II
,我忘了复制粘贴它。对于计算
Ixx=4*np.pi*ABP*Clog*Integral
,Mathematica给出了~0.87,而Python~10e-8这似乎是积分收敛非常缓慢的问题。不要从
0
集成到
np.inf
,而是尝试从
0
集成到
1e11
,看看是否得到相同的结果