2016-04-05 19 views
0

MATLABコードでMeijerのG関数が必要です。この関数がMATLABに実装されていないので、http://functions.wolfram.com/HypergeometricFunctions/MeijerG/07/01/で与えられた整数表現に基づいて関数をコーディングしようとしました。MATLABのMeijerの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; 

ガンマc機能は %のwww.mathworks.com/matlabcentral/fileexchange/3572-gammaで利用可能な複合ガンマ、です。

問題は、Mathematicaで与えられたMeijerのG関数に数値を使ってコードを比較すると、あるケースで違いがあるということです。あなたがコードを修正するのを助けることができるかどうか疑問に思っていました。

ありがとうございました。

+1

Symbl Toolbox for 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

+0

私はMuPADの 'meijerG'関数を呼び出そうとしましたが、特定のパラメータに対しては同じ値を取得しません。 – kagami

+0

不一致の正確な例が含まれているはずです。この問題は、数学的な性質(隠れた単純化、分岐点や統合輪郭などの概念)のものである可能性があります。 – ogerard

答えて