梅杰';sg函数在MATLAB中的实现

梅杰';sg函数在MATLAB中的实现,matlab,math,wolfram-mathematica,Matlab,Math,Wolfram Mathematica,我需要一个MATLAB代码中的Meijer的G函数。由于MATLAB中不存在此函数的实现,因此我尝试根据中给出的积分表示对函数进行编码 我的代码的灵感来自中给出的代码 这里的gammac函数是复数gamma,在 %www.mathworks.com/matlabcentral/fileexchange/3572-gamma 问题是,当我将使用数值的代码与Mathematica中给出的Meijer的G函数进行比较时,在某些情况下存在差异。我想知道你是否能帮我修改代码 谢谢。从R2017b开始,me

我需要一个MATLAB代码中的Meijer的G函数。由于MATLAB中不存在此函数的实现,因此我尝试根据中给出的积分表示对函数进行编码

我的代码的灵感来自中给出的代码

这里的gammac函数是复数gamma,在 %www.mathworks.com/matlabcentral/fileexchange/3572-gamma

问题是,当我将使用数值的代码与Mathematica中给出的Meijer的G函数进行比较时,在某些情况下存在差异。我想知道你是否能帮我修改代码


谢谢。

从R2017b开始,meijerG可以直接在MATLAB中获得。看见你需要符号数学工具箱。

你没有Matlab的符号工具箱吗?如果你这样做,那么你可以使用MuPAD的。可以使用从Matlab调用MuPAD函数。或者试试这个。我确实尝试调用了MuPAD的
meijerG
函数,但是对于某些参数,我没有得到相同的值。您可能应该包括精确的差异示例。问题可能更多的是数学性质(例如隐藏的简化、关于分支点和积分轮廓的约定)。
function out = Meijer_G(an, ap, bm, bq, z)
%***** Integrand definition *****
F = @(s)(GammaProd(bm,s).*GammaProd(1-an,-s).*(z.^(-s)))./(GammaProd(ap,s).*GammaProd(1-bq,-s));

%***** Contour definition *****
Sups = min(bm);
Infs = -max(1-an); % cs
cs = (Sups + Infs)/2;% s between Sups and Infs
W = 50; % W
%***** Bivariate Meijer G *****
out = real((1/(2*pi*1i))*quadv(@(s) F(s),cs-1i*W,cs+1i*W)); 

function output = GammaProd(p,z)
[pp, zz] = meshgrid(p,z);
if (isempty(p)) 
  output = ones(size(z));
else
  output = reshape(prod(gammac(pp+zz),2),size(z));
end
end
end;