0
我需要在MATLAB代碼中使用Meijer的G函數。由於在MATLAB中不存在此函數的實現,因此我試圖根據http://functions.wolfram.com/HypergeometricFunctions/MeijerG/07/01/中給出的積分表達式對函數進行編碼。Meijer在MATLAB中的G函數實現
我的代碼靈感來自http://arxiv.org/pdf/1602.05445v1.pdf中給出的代碼。
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;
這裏的gammac功能是複雜的伽馬,在 %www.mathworks.com/matlabcentral/fileexchange/3572-gamma可用。
問題是,當我使用數值將我的代碼與Mathematica中給出的Meijer G函數進行比較時,在某些情況下會有所不同。我想知道你是否可以幫助修復代碼。
謝謝。
你沒有Matlab的符號工具箱嗎?如果你這樣做,那麼你可以使用MuPAD的['meijerG'](http://www.mathworks.com/help/symbolic/mupad_ref/meijerg.html)。 MuPAD函數可以通過[在此描述的方法]從Matlab調用(http://www.mathworks.com/help/symbolic/calling-mupad-functions-from-matlab.html)。或者試試這個[這個文件交換提交](http://www.mathworks.com/matlabcentral/fileexchange/31490-meijerg)。 – horchler
我確實嘗試調用MuPAD的'meijerG'函數,但是對於某些參數,我沒有得到相同的值。 – kagami
您應該包含精確的差異示例。麻煩可能更多的是數學性質(例如隱藏簡化,關於分支點和集成輪廓的約定)。 – ogerard