2016-07-11 4 views
2

Ich brauche den Wert des folgenden Integral zu finden:Gibt es in Matlab eine eingebaute Funktion zur Berechnung des folgenden Integrals?

enter image description here

Weiß jemand, ob es für die Berechnung dieser eine eingebaute Funktion in Matlab ist?

+1

Soll es analytisch oder numerisch gelöst werden? Hast du andere Alternativen wie Wolframalpha ausprobiert? – jerpint

+1

ich möchte es numerisch lösen. Ja, ich habe in WA versucht, aber das Problem ist, dass ich das Integral innerhalb einer Schleife ausführen möchte, daher ist es besser, wenn ich eine Funktion in Matlab finde –

+1

Ich werde mit "wahrscheinlich nicht" klingeln. Es sieht aus wie ein oberes unvollständiges Gamma mit einem seltsamen exponentiellen Skalierungs-/Dämpfungsfaktor. Es sei denn, jemand anderes hat das schon einmal gesehen, würde ich vorschlagen, es als einen möglichen Weg nach vorne durch "integral" zu werfen. – TroyHaskin

Antwort

3

Beim Durchlesen der referenced paper, die später in a book erweitert wurden, ich sehe keine direkte Gleichheit für den Autor Definition der verallgemeinerten unvollständigen Gamma-Funktion ausgedrückt, dass der Matlab mit Elementary Math Bibliothek repliziert werden kann. Die Autoren verwenden das IMSL Fortran-Unterprogramm QDAGI, um ihre Wertetabelle direkt zu integrieren und zu generieren (leider nur mit fünf Dezimalstellen angegeben). Daher ist der direkteste Weg bei der Auswertung einer solchen Funktion die Verwendung von integral.

Die rohe unvollständige verallgemeinerten Gammafunktion kann als

iggamma = @(x,alpha,b) integral(@(t) (t+x).^(alpha-1) .* exp(-(t+x)-b./(t+x)),0,Inf,'ArrayValued',true) 

wo ich tt+x zu, so dass die niedriger war immer 0 und ein Array-Wert x gebunden verschoben inline geschrieben werden konnte übergeben werden. Die Tabelle im Buch skaliert diese rohe Funktion mit einem Ausdruck, der das beinhaltet, was die Autoren eine modifizierte Bessel-Funktion der dritten Art nennen, aber was die Mathworks eine modifizierte Bessel-Funktion der zweiten Art nennt (weil das überhaupt nicht verwirrend ist). Die skalierte Version wäre:

iggammas = @(x,alpha,b) iggamma(x,alpha,b) ./ (2*b.^(alpha/2) .* besselk(alpha,2*sqrt(b))) 

Die skalierte Version passt die meisten der Werte, die ich mit ein paar nicht zustimmen am fünften auf vier Dezimalstellen geprüft; dies würde ich jedoch auf Unterschiede in den Rundungs- und Integrationstoleranzparametern zurückführen.

Verwandte Themen